Avatar billede cara-mint Nybegynder
14. december 2007 - 17:29 Der 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.

Er det nogen der kan hjælpe?

På forhånd tusind tak!
Avatar billede arne_v Ekspert
15. december 2007 - 02:42 #1
Du har 3 tabeller så du skal have 2 join betingelser på.

Og så skal du nok gruppere på name fremfor uid.
Avatar billede arne_v Ekspert
15. december 2007 - 02:43 #2
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
Avatar billede cara-mint Nybegynder
15. december 2007 - 18:32 #3
Tusind tak Arne! =)

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 |

Kan du kringle den? =)
Avatar billede arne_v Ekspert
15. december 2007 - 18:55 #4
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
Avatar billede cara-mint Nybegynder
15. december 2007 - 23:22 #5
Fantastisk! Mange tak Arne, jeg sætter stor pris på din hjælp! =)
Kast et svar så du kan få de yderst velfortjent point.
Avatar billede arne_v Ekspert
15. december 2007 - 23:32 #6
kommer 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