02. oktober 2004 - 14:39Der er
11 kommentarer og 1 løsning
JOIN-problemer, lister ikke alle rækker
Jeg har to tabeller, billedalbums og billedalbum. Jeg vil gerne have listet alle rækker i billedalbums tilhørende en bestemt bruger, indeholdende en optælling af records i billedalbum, hvor billedalbums.id = billedalbum.albumid . Jeg har lavet følgende sætning: "select billedalbums.id,billedalbums.titel,billedalbums.beskrivelse,billedalbums.rating,count(billedalbum.id) as picCount from billedalbums INNER JOIN billedalbum ON billedalbums.id=billedalbum.albumid where billedalbums.brugerid = 7 GROUP BY billedalbums.id"
Problemet er så at den ikke lister records fra billedalbums, hvis ikke de er tilhørende records i billedalbum - hvordan får jeg den til det?
Har faktisk lige et ekstra lille problem. Du skal nok få ekstra point for det, for nu har jeg udvidet den lidt: select billedalbums.id,billedalbums.titel,billedalbums.beskrivelse,billedalbums.rating,count(billedalbum.id) as picCount,AVG(kommentarer.rating) as ratings from ((billedalbums LEFT JOIN billedalbum ON billedalbums.id=billedalbum.albumid) LEFT JOIN kommentarer ON billedalbums.id=kommentarer.strID) where billedalbums.brugerid = 7 GROUP BY billedalbums.id
Problemet er så at optællingen ikke længere er korrekt...hvordan kan det nu være?
Ja. Der er f.eks. kun 1 record i billedalbum der svarer til billedalbums.id, mens der er to i kommentarer med en værdi på henholdsvis 3 og 7. Resultatet bliver så at picCount = 2(burde være 1), mens ratings = 5(hvilket er korrekt nok)...
ah, ok...crap...hvordan får jeg så lavet en sætning der gør det jeg egentlig vil, altså finder count(billedalbum.id) for billedalbum.albumid = billedalbums.id samt finder AVG(kommentarer.rating) for kommentarer.strID = billedalbums.id ?
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.