Durchschnittsalter anzeigen lassen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Durchschnittsalter anzeigen lassen

    Habe ein kleines Problem. Vielleicht kann mir einer von euch weiterhelfen.

    Ich möchte Statistiken anlegen. Dafür benötige ich das Durchschnittsalter und Anzahl der User zwischen 18 - 29.

    Die Daten sind im Format "date" (1979-03-04) gespeichert. Habe das mit der Funktion AVG() versucht.

    $abfrage = "SELECT AVG(geburtstag) FROM user";
    $age = mysql_query($abfrage);

    $age sollte mir eigentlich das durchschnittsalter beinhalten, oder?. Aber es kommt die Meldung "Resource id #11".

    Was mache ich falsch?

    Gruß Michel
  • Hallo, ich will jetzt nichts falsches behaupten, aber ich bin der Meinung das, dass so nicht geht, da du das Datum erst umformatieren musst (zu einer Fließkommazahl oder Integer). Schau dir mal den Link hier an: http://my.opera.com/cpr/blog/show.dml/310421 dort stehen 3 SQL-Statments die zeigen wie es geht. Deine AVG und Date-Formatierung in einem SQL-Statment. Ich hoffe das hilft etwas.

    so long
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • Hast du jemals das Durchschnittsalter von 2 Personen berechnet? Um jetzt mal nicht auf die Funktion AVG() anzuspielen, gebe ich dir einen Hinweis:

    Ich bin 1985 geboren, mein Dad 1952.
    1985 + 1952 = 3937 : 2 = 1968,5 (das durchschnittliche Geburtsjahr).


    Was ist bitteschön nun daran schwer das jetzige Jahr zu ermitteln und davon einfach die 1968,5 abzuziehen um auf das Durchschnittsalter zu kommen?

    Verstehst du die Umsetzung mit PHP und der SELECT Abfrage nicht?

    EDIT: Achja, die Funktion AVG() funktioniert meines Wissens nur mit Zahlen! (und nicht mit xx-xx-xxxx). Da wärst du dann mit timestamps besser dran. Sowieso.
  • Versuche es mal damit.

    Quellcode

    1. <?php
    2. $abfrage = "SELECT AVG((TO_DAYS(CURRENT_DATE())-TO_DAYS(burtstag))/365.25) FROM gvs_user";
    3. list($age) = mysql_fetch_row(mysql_query($abfrage));
    4. echo $age;
    5. ?>
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • Danke für die Antworten von euch. Haben mir super weitergeholfen. Ich weiß, dass ich nicht der super-crack hinsichtlich php bin - nicht mal ansatzweise., aber ich will das lernen. Bitte um Entschuldigung wenn ich dann manchmal nerve (-für matt-).

    Ich habe das jetzt bei mir so gelöst.

    $abfrage = "SELECT AVG((TO_DAYS(CURRENT_DATE())-TO_DAYS(burtstag))/365.25) FROM gvs_user";
    list($age_avg) = mysql_fetch_row(mysql_query($abfrage));
    $age = round($age_avg,2);

    >>> round rundet die Zahlen auf 2 Kommastellen ab bzw. auf.

    Das mit mysql_fetch_row ist mir jetzt klar. Nun muss ich die Altersgruppen definieren. Wenn ich die Altergruppe 18-29 herausfiltern klappt das aber nicht mehr, da ich die Zeit ja nicht stehen bleibt.
  • Also ich hab das mal jetzt glaube ich geschafft. Ich hab die User gezählt, welche zwischen 18 und 29 Jahre sind.

    Der Code sieht so aus:

    Quellcode

    1. $alter18_29_holen = mysql_query("SELECT count( id ) FROM gvs_user WHERE to_days( current_date ) - to_days( burtstag )
    2. >= '6574,5' AND to_days( current_date ) - to_days( burtstag ) <= '10957'");
    3. $alter18_29 = mysql_fetch_row($alter18_29_holen);
    4. echo $alter18_29;


    Ist wahrscheinlich mal wieder zu kompliziert, aber anders habe ich das nicht geschafft.