17. maj 2004 - 23:48Der er
9 kommentarer og 1 løsning
Hjælp til JOIN
I have this select statement:
Jeg har følgende select forespørgsel:
SELECT distinct bp_emner.ID as bp_emner_ID, bp_emner.emne as bp_emner_emne, bp_indlaeg.emne_id as bp_indlaeg_emne_id, bp_indlaeg.oprettet as bp_indlaeg_oprettet, bp_indlaeg.indlaeg as bp_indlaeg_indlaeg FROM bp_emner, bp_indlaeg where bp_emner.forum_id = 1 and bp_emner.ID = bp_indlaeg.emne_id
Det give mig følgende resultat:
+-------------+---------------------------+--------------------+---------------------+------------------------------------+ | bp_emner_ID | bp_emner_emne | bp_indlaeg_emne_id | bp_indlaeg_oprettet | bp_indlaeg_indlaeg | +-------------+---------------------------+--------------------+---------------------+------------------------------------+ | 2 | Velkommen til dette forum | 2 | 2004-05-02 19:57:00 | Some crap here | | 2 | Velkommen til dette forum | 2 | 2004-05-02 23:51:00 | Nice | | 12 | Jeg tester lige | 12 | 2004-05-17 21:13:02 | Dette er blot en lille test mere ! | +-------------+---------------------------+--------------------+---------------------+------------------------------------+
Men det jeg skal frem til er at den kun returnere de 2 SIDSTE rækker.
Hvordan laver jeg den begrænsning ???
Det kan være at det er nemmest lige at kopiere resultatet ud i notepad, da det så er lidt mere overskueligt.
SELECT bp_indlaeg.oprettet as bp_indlaeg_oprettet, bp_indlaeg.indlaeg as bp_indlaeg_indlaeg FROM bp_emner, bp_indlaeg where bp_emner.forum_id = 1 and bp_emner.ID = bp_indlaeg.emne_id
SELECT distinct bp_emner.ID as bp_emner_ID, bp_emner.emne as bp_emner_emne, bp_indlaeg.emne_id as bp_indlaeg_emne_id, MAX(bp_indlaeg.oprettet) as bp_indlaeg_oprettet, bp_indlaeg.indlaeg as bp_indlaeg_indlaeg FROM bp_emner, bp_indlaeg WHERE bp_emner.forum_id = 1 and bp_emner.ID = bp_indlaeg.emne_id GROUP BY bp_emner_ID, bp_emner_emne, bp_indlaeg_emne_id
Brug af ikke aggregerede felter som ikke er i GROUP BY er en ikke-standard MySQL-specifik feature og er nok unpredictable med hensyn til hvad den vælger.
bp_indlaeg: bp_indlaeg.ID bp_indlaeg.emne_id (relation til bp_emner) bp_indlaeg.forfatter_id (relation til bp_brugere) bp_indlaeg.oprettet
Jeg vil vise de rækker i bp_emner som har bp_emner.forum_id = 1 (det giver 2 rækker)
Jeg vil også have at den skal vise den bp_indlaeg.oprettet (dato) fra bp_indlaeg med den seneste dato. Og KUN den ene.
Samtidigt vil jeg have at den viser den bp_brugere.brugernavn fra bp_brugere hvor bp_brugere.ID er = bp_indlaeg.forfatter_id
Men jeg vil stadig kun have de 2 rækker.
Jeg kunne vel have gjort noget andet som f.eks. at først lave det ene opslag i bp_emner og derefter lave et opslag i bp_indlaeg for hver række der blive returneret. Og igen lave et opslag i bp_brugere ud fra den returnering jeg får fra bp_indlaeg. Men jeg har prøvet dette og det bliver så komplekst at det bliver NOGET sløvt.
Jeg ville meget gerne have dette smedet sammen i ET statement.
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.