sql nach datum durchsuchen- alter berücksichtigen

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

  • sql nach datum durchsuchen- alter berücksichtigen

    Hallo - ich hoffe einer kann mit helfen. Hier mein Problem:

    ich hab eine SQL-Datenbank in der diverse Infos zu meinen registrierten Usern stehen. (Nick,wohnort,geburtsdatum,etc)

    Das geburtsdatum steht im TT.MM.JJJJ-Format in der DB.

    Ich will nun eine User-Suchengine machen, in der andere User die Datenbank nach anderen Usrn durchsuchen können. Dabei soll man eingeben können, von welchem bis welchem alter user angezeigt werden sollen. (z.B. $altervon=15 bis $alterbis=20 )

    nur wie kann ich durch diese daten suchen, wenn in der db kein alter sondern das datum steht??


    eine möglichkeit wäre es in der suche nciht zu berücksichtigen, sondern erst dananch aussortieren, über z.b. if.. aber das will cih nicht.- geht es auch direkt im sql befehl??

    Ich hoffe ihr könnt mir helfen, dany

  • #2
    Wenn nach "älter als 15" gesucht wird, nimmst du das aktuelle Datum, ziehst 15 Jahre ab, und hast das Datum, welches mindestens das Geburtsdatum sein muss.
    Mit "jünger" genau so.
    Und alles was zwischen "älter" und "jünger" liegt, bzw. genau dieses Datum hat, kommt in die Ergebnismenge.

    Da du nicht den Timestamp gespeichert hast, ist das natürlich alles etwas umständlicher, aber machbar sicher, ist eben nur ein bischen Tüfftelei.
    mfg - sagg

    Kommentar


    • #3
      ok zunächst danke für dein lösungsweg-

      die daten zu ermitteln mit php ist ja kein problem; hab ich jetz auch gemacht, nur wie kann ich dann den sql abgleich machen mit den beiden daten?

      weil ich kann ja nicht einfach mit < und > vergleichen weil ich ja die "dummen" punkte drin hab (d.m.Y)- da macht er ja dnan rechenfehler oder..

      mfg
      dany

      Kommentar


      • #4
        Sag nicht du hast als Typ Varchar in der DB?

        Weil dann, wirst du wohl oder übel alles auslesen müssen, in Timestamps umwandeln....


        Es wäre besser, du fügst in der DB noch ein Feld ein, welches den Timestamp des Geburtsdatums enthält, auf lange sicht hin wäre das ja sonst schwachsinnig, jedes mal alle User auszulesen.

        Du könntest dir dann ein Script schreiben, welches automatisch aus dem jetzigen Geburtsdatums-String einen Timestamp bildet, und diesen dann in das dafür vorgesehene Feld eintragen.
        Wäre jetzt mein einzigster Vorschlag, da etwas sinnvolles draus zu basteln.


        Hat jemand anders einen besseren Vorschlag?
        mfg - sagg

        Kommentar


        • #5
          jo hab blöderweise varchar

          ich machs jetz so wie du gesagt hast; mach noch nen zweites feld mit nem timestamp-

          dany

          Kommentar


          • #6
            mir is gerade noch nen kleines problem aufgefallen.. ich ziehe ja die altervon und alterbis von dem aktuellen datum ab--

            blöderweise wenn der wert unter die bekannte 1970 geht hab ich nen problem, wiel da kommt nen fehler..

            hier mein code, würde mich über ne "elegantere lösung" freuen- hab in google leider auch noch nichts entsprechendes gefunden..

            PHP-Code:
            $alterbis 38;
            $anfangdatum strtotime("-".$alterbis." years");
            $adatum date("d.m.Y"$anfangdatum); 
            naja gibt nen fehler; wenn ich für 38 ne kleine zahl nehm, die 1970 nicht überschreitet gehts natürlich hervorragend^^

            dany

            Kommentar


            • #7
              Windows oder Linux?
              mfg - sagg

              Kommentar


              • #8
                njo.. mein pc is windows mit apache;;

                ich weiß nicht sicher, aber ich glaube das mein späterer webserver auf linux läuft, hab schon admin angeschrieben; nurn och keine antwort.

                warum würde es auf linux gehn oder müsste ich au was ändern?

                Kommentar


                • #9
                  Nun ja, auf Linux könnte man eventuell negative Timestamps verwenden, auf Windows geht das nicht.

                  An das Problem mit den Daten vor 1970 hab ich bis zu deinem Beitrag nicht gedacht.

                  Vielleicht wäre das einfachste, anstelle des Timestamps das Datum so zu speichern, wie du es schon hast...fast zumindest.

                  Sprich im Format "JJJJ-MM-DD" mit dem Typ Date, somit könnte man jedenfalls per Query auf größer/kleiner überprüfen.
                  Müsstest nur nochmal deine DB verändern und den Timestamp dafür wieder raus nehmen.
                  mfg - sagg

                  Kommentar


                  • #10
                    ok danke! hab jetz alles auf date umgeschrieben und vergleiche im query ob größer und kleiner um so an die differenz zu kommen.

                    funktioniert und hab bis jetz kein bug entdeckt

                    an die vergleich daten komm ich wie schon vorher mit abziehen der jahre, aber diesmal um den 1970er bug zu verhindern erst explode vom date, dann abziehen und dann wieder zusammenfügen.. klappt^^

                    mfg
                    dany

                    Kommentar

                    Lädt...
                    X