Avatar billede mikkelk Nybegynder
02. oktober 2004 - 14:39 Der 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?

MVH Mikkelk
Avatar billede arne_v Ekspert
02. oktober 2004 - 14:44 #1
Erstat INNER JOIN med LEFT JOIN
Avatar billede mikkelk Nybegynder
02. oktober 2004 - 14:55 #2
takker
Avatar billede arne_v Ekspert
02. oktober 2004 - 14:58 #3
All set ?
Avatar billede mikkelk Nybegynder
02. oktober 2004 - 15:12 #4
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?
Avatar billede arne_v Ekspert
02. oktober 2004 - 15:23 #5
Hm.

Kan du uddybe "ikke korrekt" ?
Avatar billede mikkelk Nybegynder
02. oktober 2004 - 15:25 #6
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)...
Avatar billede mikkelk Nybegynder
02. oktober 2004 - 15:30 #7
Det virker som om den count pludselig tæller antal kommentarer istedet...
Avatar billede arne_v Ekspert
02. oktober 2004 - 15:31 #8
Selvfølgelig gør den det. Sådan virker en JOIN.
Avatar billede arne_v Ekspert
02. oktober 2004 - 15:32 #9
Men prøv:

count(distinct billedalbum.id) as picCount
Avatar billede mikkelk Nybegynder
02. oktober 2004 - 15:34 #10
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 ?
Avatar billede mikkelk Nybegynder
02. oktober 2004 - 15:35 #11
Takker...det virker perfekt...
Avatar billede mikkelk Nybegynder
02. oktober 2004 - 15:36 #12
65 point som tak for det :-)
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