Avatar billede axkris Nybegynder
26. august 2004 - 00:19 Der er 12 kommentarer og
1 løsning

Hjælp til join

Hej

Jeg har følgende, som bruges til at hente "M_EMAIL, M_FIRSTNAME, M_LASTNAME og M_NAME" fra "FORUM_MEMBER" hvor "LINKS_FSH.MemberID = FORUM_MEMBERS.Member_ID".

Men nu vil jeg også gerne hente de samme værdier for "MemberID_updater", som også - lige som "MemberID" -  indeholder et brugerid, som peger på en bestemt bruger i "FORUM_MEMBER".

Da jeg ikke er så go til disse avancerede joins, har jeg brug for lidt hjælp.


    strSQL = "SELECT FORUM_MEMBERS.Member_ID" & vbNewline & _
            ",    FORUM_MEMBERS.M_EMAIL" & vbNewline & _
            ",  FORUM_MEMBERS.M_FIRSTNAME" & vbNewline & _
            ",  FORUM_MEMBERS.M_LASTNAME" & vbNewline & _
            ",  FORUM_MEMBERS.M_NAME" & vbNewline & _           
            ",  LINKS_FSH.ID " & vbNewline & _
            ",  LINKS_FSH.URL" & vbNewline & _
            ",  LINKS_FSH.TITLE" & vbNewline & _
            ",  LINKS_FSH.TYPE " & vbNewline & _
            ",  LINKS_FSH.LANGUAGE " & vbNewline & _
            ",  LINKS_FSH.Email_friend " & vbNewline & _
            ",  LINKS_FSH.Email_webmaster " & vbNewline & _
            "FROM LINKS_FSH " & vbNewline & _
            "    left join " & vbNewline & _
            "    FORUM_MEMBERS " & vbNewline & _
            "ON LINKS_FSH.MemberID = FORUM_MEMBERS.Member_ID " & vbNewline & _
            "WHERE LINKS_FSH.Email_sent = 'false'" & vbNewline & _
              "    AND LINKS_FSH.Publish between '" & alternativeDate2(date()-5) & "'" & vbNewline & _
              "    AND '" & alternativeDate() & "'" & vbNewline & _
              "    AND LINKS_FSH.TYPE <> 'CHAT'" & vbNewline & _
              "    AND LINKS_FSH.MemberID <> 0" & vbNewline & _
            "    AND LINKS_FSH.FSH = 'true'" & vbNewline & _           
            "ORDER BY LINKS_FSH.Publish"
Avatar billede fennec Nybegynder
26. august 2004 - 08:19 #1
Vil du hente det i den samme SQL eller en ny?
Avatar billede axkris Nybegynder
26. august 2004 - 09:33 #2
samme sql - dataen skal select'es et hug :-)
Avatar billede fennec Nybegynder
26. august 2004 - 10:12 #3
Jeg vil gætte på det skal se sådan ud:

strSQL = "SELECT FORUM_MEMBERS.Member_ID" & vbNewline & _
            ", FORUM_MEMBERS.M_EMAIL" & vbNewline & _
            ", FORUM_MEMBERS.M_FIRSTNAME" & vbNewline & _
            ", FORUM_MEMBERS.M_LASTNAME" & vbNewline & _
            ", FORUM_MEMBERS.M_NAME" & vbNewline & _           
            ", LINKS_FSH.ID " & vbNewline & _
            ", LINKS_FSH.URL" & vbNewline & _
            ", LINKS_FSH.TITLE" & vbNewline & _
            ", LINKS_FSH.TYPE " & vbNewline & _
            ", LINKS_FSH.LANGUAGE " & vbNewline & _
            ", LINKS_FSH.Email_friend " & vbNewline & _
            ", LINKS_FSH.Email_webmaster " & vbNewline & _
            ", MemberID_updater.M_EMAIL as uM_EMAIL" &_
            ", MemberID_updater.M_FIRSTNAME as uM_FIRSTNAME" &_
            ", MemberID_updater.M_LASTNAME as uM_LASTNAME" &_
            ", MemberID_updater.M_NAME as uM_NAME" &_
            "  FROM LINKS_FSH " & vbNewline & _
            "  left join " & vbNewline & _
            "  FORUM_MEMBERS " & vbNewline & _
            "  ON LINKS_FSH.MemberID = FORUM_MEMBERS.Member_ID " & vbNewline & _
            "  left join MemberID_updater on MemberID_updater.MemberID=FORUM_MEMBERS.Member_ID" &_
            "  WHERE LINKS_FSH.Email_sent = 'false'" & vbNewline & _
            "  AND LINKS_FSH.Publish between '" & alternativeDate2(date()-5) & "'" & vbNewline & _
            "  AND '" & alternativeDate() & "'" & vbNewline & _
            "  AND LINKS_FSH.TYPE <> 'CHAT'" & vbNewline & _
            "  AND LINKS_FSH.MemberID <> 0" & vbNewline & _
            "  AND LINKS_FSH.FSH = 'true'" & vbNewline & _           
            "  ORDER BY LINKS_FSH.Publish"
Avatar billede axkris Nybegynder
26. august 2004 - 10:43 #4
Åhh, du misforstod mig lidt :-)

MemberID_updater er - lige som MemberID - blot en værdi i "LINKS_FSH", som indeholder et tal, som peger på en record i "FORUM_MEMBER".

MemberID_updater ikke derfor ikke en tabel ;)

Smider lige tabellen for LINKS_FSH, så du kan se det:


# Struktur dump for tabellen `LINKS_FSH`
#

CREATE TABLE LINKS_FSH (
  ID int(11) NOT NULL auto_increment,
  MemberID int(11) NOT NULL default '0',
  MemberID_updater int(11) NOT NULL default '0',
  CategoryID int(11) NOT NULL default '0',
  Email_sent text NOT NULL,
  Email_friend text,
  Email_webmaster text,
  Url text NOT NULL,
  Title text NOT NULL,
  Picture text NOT NULL,
  Description text NOT NULL,
  Type text NOT NULL,
  Language text NOT NULL,
  Publish date NOT NULL default '0000-00-00',
  Created date NOT NULL default '0000-00-00',
  Updated date NOT NULL default '0000-00-00',
  FSH text NOT NULL,
  Themed int(11) NOT NULL default '0',
  Broken int(11) NOT NULL default '0',
  Click int(11) NOT NULL default '0',
  LastIP text NOT NULL,
  Approved text NOT NULL,
  PRIMARY KEY  (ID),
  KEY ID (ID)
) TYPE=MyISAM;
Avatar billede axkris Nybegynder
26. august 2004 - 10:44 #5
Sagt med mere forklarende ord; MemberID er den bruger, som opretter linket, mens MemberID_updater den bruger, som senere hen opdaterer det.
Avatar billede fennec Nybegynder
26. august 2004 - 10:51 #6
OK. Det ved jeg ikke om man kan i mySQL (eller overhoved i andre, da jeg aldrig har prøvet noget ligende). Det kræver nok nogle VIEWS, og det er ikke fuldt understøttet i MySQL. Hvilken version kører du med?
Avatar billede axkris Nybegynder
26. august 2004 - 11:12 #7
MySQL 3.23.58
Avatar billede axkris Nybegynder
26. august 2004 - 11:15 #8
Jeg tror nu nok, at det kan lade sig gøre, fordi jeg fik tidligere hen en anden her på eksperten til at lave en lignende forespørgsel (det er så ikke lige i link-tabellen - som i dette eksempel - men i stedet en kategori-tabel - men principptet burde være det samme):

....F.*, C.Title AS CatTitle, C.ID AS CatID, M.M_Name AS MemberName, N.M_Name AS UpdaterName FROM ((LINKS_FSH F LEFT JOIN LINKS_CATEGORIES C ON F.CategoryID = C.ID) LEFT JOIN FORUM_MEMBERS M ON F.MemberID=M.MEMBER_ID) LEFT JOIN FORUM_MEMBERS N ON N.MEMBER_ID=F.MEMBERID_UPDATER...
Avatar billede fennec Nybegynder
26. august 2004 - 11:21 #9
Var ved at undersøge om det var muligt i den version af MySQL, men det lader det jo til at være :o)

Vender lige tilbage med en SQL-sætning.
Avatar billede fennec Nybegynder
26. august 2004 - 11:26 #10
strSQL = "SELECT FORUM_MEMBERS.Member_ID" & vbNewline & _
            ", A.M_EMAIL" & vbNewline & _
            ", A.M_FIRSTNAME" & vbNewline & _
            ", A.M_LASTNAME" & vbNewline & _
            ", A.M_NAME" & vbNewline & _           
            ", B.M_EMAIL as bM_EMAIL" & vbNewline & _
            ", B.M_FIRSTNAME as bM_FIRSTNAME" & vbNewline & _
            ", B.M_LASTNAME as bM_LASTNAME" & vbNewline & _
            ", B.M_NAME as bM_NAME" & vbNewline & _           
            ", LINKS_FSH.ID " & vbNewline & _
            ", LINKS_FSH.URL" & vbNewline & _
            ", LINKS_FSH.TITLE" & vbNewline & _
            ", LINKS_FSH.TYPE " & vbNewline & _
            ", LINKS_FSH.LANGUAGE " & vbNewline & _
            ", LINKS_FSH.Email_friend " & vbNewline & _
            ", LINKS_FSH.Email_webmaster " & vbNewline & _
            "  FROM LINKS_FSH " & vbNewline & _
            "  left join " & vbNewline & _
            "  FORUM_MEMBERS A " & vbNewline & _
            "  ON LINKS_FSH.MemberID = A.Member_ID " & vbNewline & _
            "  left join " & vbNewline & _
            "  FORUM_MEMBERS B " & vbNewline & _
            "  ON LINKS_FSH.MemberID_updater = B.Member_ID " & vbNewline & _
            "  WHERE LINKS_FSH.Email_sent = 'false'" & vbNewline & _
            "    AND LINKS_FSH.Publish between '" & alternativeDate2(date()-5) & "'" & vbNewline & _
            "    AND '" & alternativeDate() & "'" & vbNewline & _
            "    AND LINKS_FSH.TYPE <> 'CHAT'" & vbNewline & _
            "    AND LINKS_FSH.MemberID <> 0" & vbNewline & _
            "    AND LINKS_FSH.FSH = 'true'" & vbNewline & _           
            "  ORDER BY LINKS_FSH.Publish"
Avatar billede fennec Nybegynder
26. august 2004 - 11:27 #11
Glemte lige den første linje. Den skal være:
strSQL = "SELECT A.Member_ID" & vbNewline & _
Avatar billede axkris Nybegynder
26. august 2004 - 13:02 #12
Det virker - mange mange tak for hjælpen :-D

Tryk svar :-)
Avatar billede fennec Nybegynder
26. august 2004 - 13:05 #13
Så har jeg også prøvet at lave sådan en funktion. Man skal jo lære noget nyt hver dag.
.o) <-- One Eyed Jack
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester