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.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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.