Avatar billede Slettet bruger
25. april 2006 - 17:31 Der 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;
Avatar billede erikjacobsen Ekspert
25. april 2006 - 17:39 #1
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...
Avatar billede 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 ?
Avatar billede erikjacobsen Ekspert
25. april 2006 - 18:16 #3
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;
Avatar billede 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.
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