Avatar billede doncarnage Nybegynder
24. november 2009 - 02:47 Der er 9 kommentarer og
1 løsning

Udskrive antal brugere, der fx er mellem 12-15 år??

Hey folkens,

Som overskriften indikerer er jeg på udkig efter en funktion, hvor jeg kan udskrive en aldersfordeling på mit site..

I min bruger tabel har jeg en "date" række ved navn age, og her listes dataen fx som 1984-03-16..

Jeg har selv prøvet mig frem på følgende måde, men uden held desværre:

mysql_query("SELECT COUNT(*) AS antal FROM members_regi WHERE date_add(age,interval 12 YEAR) >= NOW() AND  date_add(age,interval 15 YEAR) <= NOW()") or die(mysql_error());


Nogle, der har en god idé til det ;)?
Avatar billede arne_v Ekspert
24. november 2009 - 03:31 #1
to forslag:

SELECT YEAR(NOW())-YEAR(birthday)-IF(DAYOFYEAR(NOW())<DAYOFYEAR(birthday),1,0) AS ageyears,COUNT(*) AS n FROM members_regi;

SELECT 5*FLOOR(ageyears/5) AS start,5*FLOOR(ageyears/5)+4 AS last,COUNT(*) AS n
FROM (SELECT YEAR(NOW())-YEAR(birthday)-IF(DAYOFYEAR(NOW())<DAYOFYEAR(birthday),1,0) AS ageyears FROM members_regi) x
GROUP BY 5*FLOOR(age/5);
Avatar billede arne_v Ekspert
24. november 2009 - 03:31 #2
Hvis dine grupper er uens vil jeg foreslå at du bruger den første og ligger sammen i PHP.

Alternativt skal du have en age2agegroup tabel.
Avatar billede doncarnage Nybegynder
24. november 2009 - 04:10 #3
Har prøvet lidt med første nu, dog uden det store held (den udskriver i hvert fald ikke det rigtige antal)

Jeg er dog meget i tvivl om hvorvidt jeg fuldstændig har misforstået dig og klokken er også mange :/... Men følgende har jeg prøvet:

$antal_12_15 = mysql_query("SELECT YEAR(NOW())-YEAR(age)-IF(DAYOFYEAR(NOW())<DAYOFYEAR(age),15,12) AS ageyears,COUNT(*) AS n FROM members_regi GROUP by id") or die(mysql_error());
Avatar billede preppydude Nybegynder
24. november 2009 - 07:30 #4
Hey.

Jeg er ikke ret god til at køre tingene rent i SQL (har meget sjældent haft brug for det) men har du prøvet noget lignende det her:
<?php
if (($query=@mysql_query("SELECT COUNT(*) AS found FROM members_regi WHERE age>=DATE_ADD(NOW(), INTERVAL 15 YEAR) AND age<=DATE_ADD(NOW(), INTERVAL 12 YEAR);"))!=false) {
  $row  = mysql_fetch_assoc($query);
  $antal = $row["found"];
  unset($row);
  mysql_free_result($query);
} else printf("Query failed; %s", mysql_error());
?>


Har ikke mulighed for at teste det, og det ligner lidt det du har startet med.. men ja, prøv det, og hvis det virker, så behold dine points..
Avatar billede showsource Seniormester
24. november 2009 - 08:16 #5
Den her vist go' nok:

$sql = "SELECT
        COUNT(*) as ialt
        FROM
        members
        WHERE (SELECT (YEAR(CURDATE())-YEAR(age))-(RIGHT(CURDATE(), 5)<RIGHT(age, 5))) BETWEEN 12 AND 15";

Eller, den virker for mig, mysql 5.1.38
Avatar billede doncarnage Nybegynder
24. november 2009 - 11:28 #6
Din ser i hvert fald helt bestemt ud til at virke showsource ;)

Men har lige et spørgsmål til hvad den her del gør??

(RIGHT(CURDATE(), 5)<RIGHT(age, 5))
Avatar billede showsource Seniormester
25. november 2009 - 10:10 #7
Hvis din fødselsdato f.eks. er 1999-11-25, fylder du 10 år i dag.
Er den 1999-11-26 er du 9 år i dag.

Det er iøvrigt en query taget fra manualen.
Avatar billede doncarnage Nybegynder
25. november 2009 - 16:10 #8
Jeg forstod bare ikke lige hvor de "5" kom ind i billedet..

Men smid et svar, så du kan få points ;)
Avatar billede showsource Seniormester
25. november 2009 - 16:32 #9
5 er de fem sidste tegn
Avatar billede doncarnage Nybegynder
25. november 2009 - 16:38 #10
Oh okay, på den måde.. Mange tak ;)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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