25. april 2006 - 17:31Der er
3 kommentarer og 1 løsning
Problemer med SUM - IF
Hej eksperter,
Jeg har følgende udtræk. Mit problem er at udtrækket kun virker hvis der findes noget i tabellen blog_comment. Umiddelbart kan jeg ikke lige se hvad jeg gør galt?
SELECT a.id, a.title, DATE_FORMAT(a.posted, '%d/%m-%Y %H:%i:%s') AS time, SUM(IF(a.id = b.reference,1,0)) AS total FROM blog a, blog_comment b WHERE YEAR(a.posted) = '2006' GROUP BY a.id ORDER BY a.id DESC;
Du laver en join, men har ingen join-betingelse i din WHERE. Måske er det a.id=b.reference, men den skal altså ned i den WHERE sætning, hvis din sql-sætning skal køre bare en smule effektivt. Din SUM bliver så en count.
SELECT a.id, a.title, DATE_FORMAT(a.posted, '%d/%m-%Y %H:%i:%s') AS time, COUNT(*) AS total FROM blog a, blog_comment b WHERE a.id = b.reference AND YEAR(a.posted) = '2006' GROUP BY a.id ORDER BY a.id DESC;
Prøv det, men det løser nok ikke hele problemet...
Synes godt om
Slettet bruger
25. april 2006 - 18:00#2
Det var egentlig også sådan jeg havde lavet det i første omgang. Problemet er, at jeg skal lave udtrækket fra a. tabellen, men samtidig skal jeg have antallet af rækker fra b. tabellen hvor a.id = b.reference.
Det udtræk du skriver, giver det korrekte resultat, men den henter kun ud hvis den finder noget i b. tabellen. Hvor mit postede udtræk giver det korrekte resultat, dog skal der være minimum en record i b. tabellen før det virker.
Du har naturligvis ret i at der bør være en join betingelse. Men hvordan løser jeg så den alligevel spytter data ud fra a. tabellen hvis der ikke er noget der passer til det angivet id i b. tabellen ?
Godt så, det var første skridt på vejen. Du skal bruge en LEFT JOIN og ikke bare en join. Det bliver noget i retning af:
SELECT a.id, a.title, DATE_FORMAT(a.posted, '%d/%m-%Y %H:%i:%s') AS time, COUNT(*) AS total FROM blog a LEFT JOIN blog_comment b ON a.id = b.reference WHERE YEAR(a.posted) = '2006' GROUP BY a.id ORDER BY a.id DESC;
Synes godt om
Slettet bruger
25. april 2006 - 18:29#4
Ah der kan man bare se :-) Jeg må have kigget manualen lidt bedre igennem engang jeg får tid til det.
Jeg takker og bukker for hjælpen. Hvis du som noget nyt er begyndt at samle på points igen, må du sige til. Jeg lukker og slukker spørgsmålet her.
Synes godt om
Ny brugerNybegynder
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.