alterszeitraum -> db check

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

  • alterszeitraum -> db check

    hallo,
    ich habe eine suche bei der man nach einem alterszeitraum z.B
    von 23 - 25 suchen kann.

    $alter_von = 23;
    $alter_bis = 25;

    in der db gibt es die spalten jahr, monat und tag.

    wie kann ich nun überprüfen welches alter mit dem zeitraum übereinstimmt. bisher habe ich:

    $jetzty = date("Y");
    $jetztm = date("m");
    $jetztt = date("d");

    $jahr_von = $jetzty - $alter_von;
    $jahr_bis = $jetzty - $alter_bis;

    .... AND (jahr <= '$jahr_von' AND jahr >= '$jahr_bis') ....

    wie kann ich aber nun noch den monat und den tag hinzufügen damit das wirkliche alter auch überprüft wird da man ja jemand erst geburtstag haben kann und somit jünger ist als der, der z.B. am 12 januar hatte.

    vielen dank

  • #2
    Siehe:
    http://www.php-resource.de/forum/sho...?threadid=3975

    Kommentar


    • #3
      aber da geht es doch darum aus einem geburtsdatum ein alter zu errechnen. das will ich doch gar nicht

      Kommentar


      • #4
        Hi!

        Zuerst machst mal ein Datumsformat date(Y:m:d). Dann musst alles nach sekunden rechnen über die UNIXTIME.

        Dann kannst es leicht überprüfen

        Grüsse
        FreeBSD - Unleash the daemon inside your PC

        Kommentar


        • #5
          hallo,
          kannst du mir bitte erklären wie genau? danke.

          Kommentar


          • #6
            Also

            Tabelle würde so aussehen:
            Code:
            geburstage (
            userID int unsigned not null auto_increment primary key;
            geburtstag date not null
            );

            // Geburtsdatum, welches überprüft werd soll
            $datum_user = date("Y-m-d");

            // mit welchem user aus der datenbank soll verglichen werden
            $userID = 3;

            // liefert 0 oder 1, je nachdem ob der Benutzer jünger oder Älter ist als der User in der Datenbank

            select UNIX_TIMESTAMP($datum_user) < UNIX_TIMESTAMP(geburtsdatum) from geburtstage where benutzerid=$userID;

            Kenne deine Tables nicht, deshalb musst es selber anpassen.

            Wenn du die Einträge des Geburtstages einzeln hast(Jahr, Monat, Tag) einfach zu einem ganzen Datum zusammenfassen in der Abfrage oder UNIX_TIMESTAMP(blub) für Jahr, Monat, Tag kombinieren.

            Einfacher is alles als Datum statt Jahr, Monat, Tag trennen
            Grüsse

            [Editiert von iQD am 27-01-2002 um 22:35]
            FreeBSD - Unleash the daemon inside your PC

            Kommentar


            • #7
              hallo,
              danke. sorry. vielleich ist mein kopf jetzt einfach super leer -> aber ich weiß jetzt einfach nicht wie ich das auf meins übertragen soll.


              wenn ich ein von- und bis-alter habe;
              also 23 - 25 dann habe ich doch kein geburtsdatum das ich überprüfen kann sondern nur einen zeitraum.

              und mit $datum_user = date("Y-m-d"); definiere ich doch das aktuelle datum und vergleich dann das mit dem eingetragenen.

              gibt es vielleicht irgendwo eine erklärung zu timestamp?




              Kommentar


              • #8
                hier mal ein link zu TIMESTAMP

                http://www.mysql.com/documentation/m...time_functions

                Der Zeitraum soll das Jahre betragen?

                oder sollen das Genau auf Sekunden sein?
                Ich wollte dir nur Zeigen, daß es einfacher ist wenn man ein Datum hat anstatt tag, monat und jahr getrennt. Dann kann man nämlich über die Sekunden das prüfen wie oben gezeigt. Natürlich noch mit einer AND abfrage etc.

                aber ich glaube was du wolltest is das hier:

                .... AND (jahr <= '$jahr_von' AND jahr >= '$jahr_bis') AND (monat <= '$jetztm' AND monat >= '$jetztm') AND (tag <= '$jetztt' AND tag >= '$jetztt')

                aber hier werden sobald die monatsabfrage false liefert die jahre nicht mehr berücksichtigt etc. also is das keine lösung.

                Also dies hier funktioniert, wann du die geburtstage als Datumstyp in der table hast:
                Code:
                select * from table where (to_days(now()) - to_days(geburtstag))/365 > $alter_von and (to_days(now()) - to_days(geburtstag))/365 < $alter_bis;
                aber weil du Jahr, Monat und tage getrennt hast musst in mySQL erst mal ein Datum zusammenflicken:

                Code:
                select * from table where (to_days(now()) - to_days(DATE_FORMAT(concat(jahr,monat,tag), "%Y-%m-%d")))/365 > $alter_von and (to_days(now()) - to_days(DATE_FORMAT(concat(jahr,monat,tag), "%Y-%m-%d")))/365 < $alter_bis;
                Ziemlich kompliziert, wegen den getrenntem Jahr, Monat und Tag, aber funzt so *g*(habs getestet)

                Zu beachten:
                Jahr MUSS 4 Stellig sein
                Monat MUSS 2 Stellig sein
                Tag MUSS 2 Sellig sein
                aufgrund der DATE_FORMAT Funktion

                So viel spass damit
                Grüsse

                [Editiert von iQD am 28-01-2002 um 00:46]
                FreeBSD - Unleash the daemon inside your PC

                Kommentar


                • #9
                  danke. also ich habe das nun auch einmal ausprobiert


                  $verbindung = @mysql_connect("$DBHost","$DBUser","$DBPass");
                  mysql_select_db ("$DBName");
                  $query = "select * FROM test_alter WHERE (to_days(now()) - to_days(DATE_FORMAT(concat(jahr,monat,tag), "%Y-%m-%d")))/365 > $alter_von and (to_days(now()) - to_days(DATE_FORMAT(concat(jahr,monat,tag), "%Y-%m-%d")))/365 < $alter_bis";
                  $result = mysql("$sql_bdd",$query,$verbindung);
                  $num = mysql_numrows($result);

                  aber bekomme nur einen error in der zeile wo sql anweisung ist.
                  da du meintest das es bei dir funktioniert hatte versteh ich nun nicht warum es bei mir nicht geht

                  Kommentar


                  • #10
                    Dann liegt es vermutlich an den " beim Ausdruck
                    "%Y-%m-%d" -> mach '%Y-%m-%d' draus:

                    $query = "select * FROM test_alter WHERE (to_days(now()) - to_days(DATE_FORMAT(concat(jahr,monat,tag), '%Y-%m-%d')))/365 > $alter_von and (to_days(now()) - to_days(DATE_FORMAT(concat(jahr,monat,tag), '%Y-%m-%d')))/365 < $alter_bis";

                    Kommentar


                    • #11
                      ok. also vielen vielen dank euch allen für die super hilfe !!!!

                      Kommentar


                      • #12
                        Ach ja, hatte vergessen zu sagen, dass dies nur das Select-Statement für die mySQL-Shell ist.

                        Es hat natürlich nicht gefunzt in PHP nur wegen den " in der DatumsSequenz. Da in einem "blabla" string keine " ohne escapen erlaubt sind.

                        Es wäre vielleicht auch leichter zu lesen wenn du die Datumssequenz in einen String packst und diesen String dann in die Abfrage packst.

                        Aber so is halt kompakter und bringt vielleicht 0.1 sec Ausführungszeit

                        Grüsse

                        [Editiert von iQD am 29-01-2002 um 21:25]
                        FreeBSD - Unleash the daemon inside your PC

                        Kommentar


                        • #13
                          frei nach dem Manual :
                          SELECT ((YEAR(CURRENT_DATE)-YEAR(birthdate)) - (RIGHT(CURRENT_DATE,5)<RIGHT(birthdate,5))) as age WHERE (((YEAR(CURRENT_DATE)-YEAR(birthdate)) - (RIGHT(CURRENT_DATE,5)<RIGHT(birthdate,5))) > $SearchedAgeFrom) AND (((YEAR(CURRENT_DATE)-YEAR(birthdate)) - (RIGHT(CURRENT_DATE,5)<RIGHT(birthdate,5))) < $SearchedAgeTo)

                          ich weiß nicht ob folgendes funktioniert :
                          SELECT ((YEAR(CURRENT_DATE)-YEAR(birthdate)) - (RIGHT(CURRENT_DATE,5)<RIGHT(birthdate,5))) as age WHERE age > 23 AND age < 25

                          // Birthdate enthält das Geburtsdatum im DATE_FORMAT-

                          schau dir am besten das Manual an..probier die Beispielanfragen durch und versuch sie zu verstehen. Ansonsten ist es schwer sie anzupassen..

                          PS.: Gerade gemerkt dass ich in meiner Anfrage in meinem Script einen Fehler hatte.
                          Sollte aber trotzdem funktionieren.

                          Kommentar

                          Lädt...
                          X