14. december 2007 - 17:29Der er
5 kommentarer og 1 løsning
Count på tværs af tabeller
Hejsa!
Jeg har 3 tabeller. En med brugere, en med brugergrupper og en med emails som er sendt til brugerne. Jeg ønsker at lave en SQL der henter brugerne, fra nogle bestemte brugergrupper sammen med en COUNT på, hvor mange emails der er sendt til de forskellige brugere.
Altså:
Navn | mails ---------------- Klaus | 4 Hans | 1 Søren | 3
########
SELECT fe_users.name AS name, count(emails.uid) AS number_of_emails FROM fe_users, fe_groups, emails WHERE (fe_groups.uid = 2 OR fe_groups.uid = 8 OR fe_groups.uid = 9) GROUP BY fe_users.uid
########
Ovenstående SQL giver mig et forkert resultat. For det første indsætter den det totale antal emails ud for hver eneste bruger. Og for det andet bliver antallet af emails ganget med 3. Det sidste har jo nok noget med de 3 brugergrupper at gøre.
SELECT fe_users.name AS name, count(emails.uid) AS number_of_emails FROM fe_users, fe_groups, emails WHERE fe_users.x=fe_groups.x AND fe_users.y=emails.y AND fe_groups.uid IN (2,8,9) GROUP BY fe_users.name
Eneste problem er blot, at det kun er de navne som rent faktisk har modtaget en email, som kommer med i resultatlisten. Jeg vil egentlig også gerne have dem med som ikke har modtaget en email.
Altså:
Navn | mails ---------------- Klaus | 4 Hans | Søren | 3 Lasse |
SELECT fe_users.name AS name, count(emails.uid) AS number_of_emails FROM (fe_users INNER JOIN fe_groups ON fe_users.x=fe_groups.x) LEFT JOIN emails ON fe_users.y=emails.y WHERE fe_groups.uid IN (2,8,9) GROUP BY fe_users.name
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.