Alter in Prozent, von..-..bis - Query

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Alter in Prozent, von..-..bis - Query

    Ich möchte das Alter aller meiner Benutzer im Alter von 18 Jahren
    in Prozent anzeigen. Kann bitte jemand meine Query angucken und mir
    sagen, was ich falsch gemacht habe?

    PHP-Code:
    <?php
    $topical_year 
    date("Y");

    //birthday hat das Format: TT.MM.JJJJ

    $s mysql_query("SELECT birthdate, COUNT(*) AS num FROM
    user WHERE (
    $topical_year - substr(birthdate,6,4)) <= '18'
    GROUP BY birthdate ORDER BY id"
    );

    while(
    $r mysql_fetch_assoc($s))
    {
      
    $q 100/$row_all[num]*$r[num];
      echo 
    $q;
    }
    ?>

  • #2
    Ich möchte das Alter aller meiner Benutzer im Alter von 18 Jahren in Prozent anzeigen


    "100% aller 18-jähriger besucher dieser seite sind 18 jahre alt!"

    wie wär's mit einer besseren formulierung?

    Kommentar


    • #3
      Sorry

      In meiner Datenbank befinden sich Benutzer im Alter von 16 bis 60 Jahren.
      Nun möchte ich aus der Gesamtanzahl der Benutzer,
      die 18jährigen heraussuchen und in Prozent angeben.

      Kommentar


      • #4
        Nun ja, die Anzahl der 18jährigen hast du ja mit deiner Abfrage schon herausbekommen. Jetzt musst du nur noch die gleiche Abfrage ohne die Alterseinschränkung machen, um die Anzahl aller Benutzer herauszubekommen.

        Der Rest ist Dreisatz:

        Prozent = Anzahl 18-jährige / Anzahl Gesamt * 100

        Gruß Marian
        Online-Kurse die jeder versteht: HTML, PHP, MySQL, Word, Excel
        http://www.lernpilot.de/wbt/

        Kommentar


        • #5
          Das habe ich ja schon mit einer Query vorher gemacht:

          $q = 100/$row_all[num]*$r[num];
          Der Fehler liegt eher hier:

          PHP-Code:
          (...) WHERE ($topical_year substr(birthdate,6,4)) <= '18' (...) 

          Kommentar


          • #6
            Re: Alter in Prozent, von..-..bis - Query

            Mit substr(birthdate,6,4) betrachtest du nur das Jahr. Das kann zu einem falschen Endergebnis führen.

            Beispiel:
            - 2 Daten in der DB: 10.10.1987, 05.05.1987
            - Query wird im August 2005 ausgeführt => Ergebnis: beide sind 18
            - korrektes Ergebnis: einer ist 18, der andere wird es erst im Oktober

            Wandle die Spalte birthdate ins Format DATE um und versuchs mit
            Code:
            WHERE DATE_ADD(birthdate, INTERVAL 18 YEARS) <= CURDATE()
            Erklärung: "wenn Datum-der-Geburt + 18 Jahre <= heute" ist immer dann wahr, wenn die Person ihren 18. Geburtstag schon hatte oder gerade hat.
            Bei der Syntax bin ich mir nicht sicher, aber die Funktionen sind ja alle auch im Manual zu finden.

            Den prozentualen Anteil der unter-18-jährigen bekommst du auch ohne PHP heraus: (ungetestet)
            Code:
            SELECT 
              (
                COUNT(
                  SELECT id FROM user 
                  WHERE DATE_ADD(birthdate, INTERVAL 18 YEARS) <= CURDATE()
                ) / COUNT(id) 
              ) * 100
            FROM user
            Zuletzt geändert von onemorenerd; 14.08.2005, 22:49.

            Kommentar


            • #7
              @onemorenerd:
              deine Lösung mit dem Sub-Select funktioniert erst ab MySQL 4.1 und das hat noch nicht jeder.

              Gruß Marian
              Online-Kurse die jeder versteht: HTML, PHP, MySQL, Word, Excel
              http://www.lernpilot.de/wbt/

              Kommentar


              • #8
                Ist mir schon klar, aber ich würde dann ein Update empfehlen.
                Wenn die Möglichkeit nicht besteht, kann man die Query in einen JOIN umstricken.

                Kommentar

                Lädt...
                X