29. juni 2006 - 07:35Der er
1 kommentar og 1 løsning
left join med flere clauses i on
SELECT party.time_cancel, party.time_reg, party.time_start, party.area, party.title, party.flyer, COUNT(user_party.user_id) AS num_user, SUM(party_pics.pic_end-party_pics.pic_start+1) AS num_pic, COUNT(debate.id) AS num_cont FROM (($DB.party party LEFT JOIN $DB.user_party user_party ON user_party.party_id='$value') LEFT JOIN $DB.party_pics party_pics ON party_pics.party_id='$value') LEFT JOIN $DB.debate debate ON debate.thread_id=party.thread_id && debate.reply_id!=0 WHERE party.id='$value' GROUP BY party.id
Der bliver ikke returneret nogle fejl, men 'num_user', 'num_pic' og 'num_cont' bliver ikke talt korrekt!?
'num_user' = 6 // men skal give 1 'num_pic' = 75 // men skal give 25 'num_cont' = 6 // men skal give 3
Jeg har selv haft samme problem da jeg ville hente en sum() fra flere tabeller på en gang, men min talte også forkert. Det gør den pga joinen, og jeg fandt IKKE en løsning.
Hvis du prøver at tælle hvor mange rækker der returneres af user_party, party_pics og debate vil du se sammenhængen med de for store tal. Hvis jeg husker rigtig med hvordan den opfører sig så gætter jeg på at tabellerne indvolvere følgende: user_party 1 række party_pics 2 rækker debate 3 rækker
hvorfor num_user er 2x3 gange for stor. party_pics 1*3 gange for stor og num_cont er 1*2 gange for stor. Hvis du joinede en tabel til som havde 3 række ville de 3 tal blive 3 gange så stor.
Min løsnign blev at lave flere selvstændige selects for at trække mine sum's ud.
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.