Avatar billede Lucky_Mik Nybegynder
23. september 2009 - 13:53 Der er 7 kommentarer og
1 løsning

Statistik med Mysql - Count

Hej

Jeg har 4 tabeller:
Brugere(user_id)
Byer(by_id, user_id)
Aldersgrupper(aldersgruppe_id, user_id)
Køn(køn_id, user_id) - mand eller kvinde

Brugerne kan tilmelde sig flere byer og flere aldersgrupper, men selvfølgelig kun et køn.

Jeg vil gerne vise statistik i et kompakt skema grupperet efter byer(ca 35 forskellige). Der er desuden 10 forskellige aldersgrupper samt 2 køn på følgende måde:

Område    aldersgruppe1                    aldersgruppe 2
By 1    antal mænd/antal kvinder    antal mænd/antal kvinder
By 2    antal mænd/antal kvinder    antal mænd/antal kvinder


35 byer, 10 aldersgrupper, 2 køn - det giver 700 gange COUNT. Hvordan gør jeg dette i Mysql og hvordan får jeg det vist v.h.a. PHP ?

Venlig hilsen Kim
Avatar billede arne_v Ekspert
24. september 2009 - 00:27 #1
1)  De 4 tabeller burde nok merges sammen til 1 enkelt tabel.

2)  Men ellers

SELECT by_id,aldersgruppe_id,koen_id,COUNT(*) AS antal
FROM byer,aldersgrupper,koen
WHERE byer.user_id=aldersgrupper.alder_id AND byer.user_id=koen.koen_id
GROUP BY by_id,aldersgruppe_id,koen_id
ORDER BY by_id,aldersgruppe_id,koen_id

til at hente data og så PHP kode til at præsentere data i en tabel.
Avatar billede Lucky_Mik Nybegynder
26. september 2009 - 10:03 #2
Hej

Jeg vil gerne have vist alle resultater for alle byer, alle aldersgrupper og alle køn.

Der er tabellen by_valg(indeholder byvalg_id, user_id, bynavn_id) og tabellen byer(indeholder bynavn_id, bynavn).
Og tabellen aldersgruppe_valg(indeholder aldersgruppe_valg_id, user_id, aldersgruppe_id) og tabellen aldersgrupper(indeholder aldersgruppe_id, aldersgruppe).
Og tabellen koen_valg(indeholder koen_valg_id, user_id, koen).
Og den fælles relaterede tabel user_info(indeholder uder_id).

Jeg har 46 byer i tabellen "byer" og 10 aldersgrupper i tabellen "aldersgrupper" og de to køn. Det er 920 "resultater".

Tabellerne byer, aldersgrupper og køn er ikke direkte relaterede. Hver af disse 3 tabeller er relateret til den 4. tabel, "user_info", som indeholder feltet "user_id".

Følgende giver mig de 920 resultater, men hvordan får jeg countet antallet af usere ud for hvert resultat ?

SELECT bynavn, aldersgruppe, koen FROM byer, aldersgrupper, koen_valg
GROUP BY bynavn, aldersgruppe, koen
ORDER BY bynavn, aldersgruppe_id, koen
Avatar billede arne_v Ekspert
26. september 2009 - 15:02 #3
proev:

SELECT bynavn, aldersgruppe, koen,COUNT(*) AS antal
FROM byer, aldersgrupper, koen_valg
GROUP BY bynavn, aldersgruppe, koen
ORDER BY bynavn, aldersgruppe_id, koen
Avatar billede Lucky_Mik Nybegynder
26. september 2009 - 15:12 #4
Den har jeg selv prøvet.
Jeg får 920 resultater, men ved alle kvinderne er resultatet 1 og ved mændene 3. Det er det antal mænd hhv kvinder der er i databasen.
Avatar billede arne_v Ekspert
26. september 2009 - 15:23 #5
ah - der mangler jo join betingelser
Avatar billede arne_v Ekspert
26. september 2009 - 15:24 #6
du skal have betingelser paa som knytter tabellerne i FROM sammen - ligesom vist tidligere
Avatar billede Lucky_Mik Nybegynder
26. september 2009 - 15:41 #7
Jeg har lige prøvet

SELECT bynavn, aldersgruppe, koen,COUNT(*) AS antal
FROM byer, aldersgrupper, koen_valg, by_valg, aldersgruppe_valg
WHERE byer.bynavn_id=by_valg.bynavn_id
AND aldersgrupper.aldersgruppe_id=aldersgruppe_valg.aldersgruppe_id
AND by_valg.user_id=aldersgruppe_valg.user_id
AND koen_valg.user_id=by_valg.user_id
GROUP BY bynavn, aldersgruppe, koen
ORDER BY bynavn, aldersgrupper.aldersgruppe_id, koen

Ovennævnte er ikke helt rigtigt sat op, men det giver også langt mindre end de 920 resultater. Måske skal jeg ud i noget med noget LEFT JOIN for at få alle 920 med ? Men hvordan er det lige ? Min tabelstruktur er ikke helt almindelig, men sådan ser de altså ud.
Avatar billede Lucky_Mik Nybegynder
15. oktober 2009 - 14:04 #8
problemet blev ikke løst, jeg prøver at spørge på en anden måde
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