23. september 2009 - 13:53Der 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 ?
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.
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
SELECT bynavn, aldersgruppe, koen,COUNT(*) AS antal FROM byer, aldersgrupper, koen_valg GROUP BY bynavn, aldersgruppe, koen ORDER BY bynavn, aldersgruppe_id, koen
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.
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.
problemet blev ikke løst, jeg prøver at spørge på en anden måde
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.