Jan: Nach bestimmtem Datum suchen

Hallo Leute!

Nun, ich hab eine Datenbank die auch ein Feld "Datum" hat. Bisher hab ich einfach ein VARCHAR-Feld dafür genommen, da das Datum ja per Hand eingegeben wird.

Nun möchte ich aber eine kleine Suchmaschine basteln, wo ich zB alle Datensätze zwischen dem 15.08. und 21.08. raussuchen möchte.

Wie kann ich das nun am besten realisieren?

Ich hätte nun die Idee gehabt, je 2 Int-Felder für Tag und Monat zu nehmen, doch wird das dann recht kompliziert.

In MySQL gibt es da auch DATE-Felder, nur hab ich mit denen keine Erfahrung. Wie kann ich da das Format angeben, da das Datum hier ja amerikanisch abgespeichert wird, habe jedenfalls eine Test-DB eingerichtet und da wird automatisch der Default auf "0000-00-00" gestellt.

Hoffe, dass hier jemand einen Ansatz weiß.

lg, Jan

  1. Hallo Jan,

    In MySQL gibt es da auch DATE-Felder, nur hab ich mit denen keine Erfahrung. Wie kann ich da das Format angeben, da das Datum hier ja amerikanisch abgespeichert wird, habe jedenfalls eine Test-DB eingerichtet und da wird automatisch der Default auf "0000-00-00" gestellt.

    Ich rate mal, dass Du MxSQL auch als Datenbank benutzt. So ganz genau hastz Du das ja nicht verraten. Aber da du bisher VarChar eingesetzt hast, hört sich das doch so an.

    Das Datum wird im ANSI-Format gespeichert, weil man es so einfach mit einem String-Index belegen kann und sortieren kann. Da kann man dann auch einfach die Größer- und Kleiner-Vergleiche ansetzen. Schau doch mal genau hin. Man muss dafür gar nicht rechnen, sondern das Datum nur wie einen String sortieren. Das macht die Datenbank für Dich.

    ...where $erstesDatum < DATUM and $zweitesDatum > DATUM order by DATUM

    So ungefähr könnte das dann aussehen

    Grüße

    Tom

    1. Hi!

      Das Datum wird im ANSI-Format gespeichert, weil man es so einfach mit einem String-Index belegen kann und sortieren kann. Da kann man dann auch einfach die Größer- und Kleiner-Vergleiche ansetzen. Schau doch mal genau hin. Man muss dafür gar nicht rechnen, sondern das Datum nur wie einen String sortieren. Das macht die Datenbank für Dich.

      ...where $erstesDatum < DATUM and $zweitesDatum > DATUM order by DATUM

      Ja, aber da DATE das Datum im amerikanischen Format anordnet, und ich es im deutschen Format (also tt.mm.jjjj statt jjjj-mm-tt), bekomm ich hier wieder ein Problem.

      Das Problem selbst ist nicht die Suche nach dem Datensatz, sondern eher die verschiedenen Format bei Ein- und Ausgabe.

      Gruß, Jan

      1. Moin!

        Ja, aber da DATE das Datum im amerikanischen Format anordnet, und ich es im deutschen Format (also tt.mm.jjjj statt jjjj-mm-tt), bekomm ich hier wieder ein Problem.

        Das Format YYYY-MM-TT ist _kein_ amerikanisches Format (das ist MM/TT/YYYY), sondern internationaler Standard - und ließe sich auch als String gut sortieren.

        Das Problem selbst ist nicht die Suche nach dem Datensatz, sondern eher die verschiedenen Format bei Ein- und Ausgabe.

        Du kannst im SELECT-Statement mit Datumsfunktionen angeben, welches Ausgabeformat du möchtest. Für das Schreiben in die Datenbank könntest du entsprechendes benutzen, oder mit deiner Programmiersprache das Datumsformat "passend" herrichten. Natürlich kannst du auch die Ausgabe des Datums dort realisieren.

        Siehe dazu auch http://www.mysql.com/documentation/mysql/bychapter/manual_Reference.html#Date_and_time_functions.

        Jedenfalls ist ein DATE-Feld in MySQL genau das richtige für dein Vorhaben, weil du nur damit ordentlich nach Datum sortieren kannst.

        - Sven Rautenberg

        --
        Diese Signatur gilt nur am Freitag.
        1. Hallo Jan,

          Das Format YYYY-MM-TT ist _kein_ amerikanisches Format (das ist MM/TT/YYYY), sondern internationaler Standard - und ließe sich auch als String gut sortieren.

          Um Dir noch ein wenig "Selbermachermut" zuzusprechen:
          Deine Idee, jeden Teil des Datums in einem eigenen Feld zu erfassen, ist sogar richtig. Das Datum, so wie wir es kennen, stellt schließlich einen Record (eine Structure, ein Datenmodell) dar, das aus drei Entitäten besteht:

          Jahr, Monat, Tag

          Und da machst Du im Formular einfach dei Teilfelder draus, die du hübsch hintereinander anordnest und innder landesspezifischen Reihenfolge mit dem landesspezifischen Trennzeichen. Dann kannst Du auch alle drei Teile auf Plausibilität überprüfen und für die Suche auch Eingaben zulassen, wie z. 09/2002. Den Tag musst Du dann eben passend ergänzen im Script.

          also
          <form action="datumssuche.php" method="post" ....>
            <input type="text" name="txt_tag" id="tag" size="2" maxlenght="2">.
            <input type="text" name="txt_monat" id="monat" size="2" maxlenght="2">.
            <input type="text" name="txt_jahr" id="jahr" size="4" maxlenght="4"><br />
            <input ....
          </form>

          Un in Deinem Script musst Du dann nicht erst mit substring() oder explode() die einzelnen Teile wieder auseinanderdröseln, sondern hast sie gleich mundgerecht aufbereitet vorliegen...

          Viel Spaß noch

          Liebe Grüße aus http://www.braunschweig.de

          Tom

          --
          Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
        2. Hi!

          Das Format YYYY-MM-TT ist _kein_ amerikanisches Format (das ist MM/TT/YYYY), sondern internationaler Standard - und ließe sich auch als String gut sortieren.

          Achja, dachte doch, irgendwas kommt mir komisch vor. Auf jedenfall ist es ein in unserer Gegend unübliches Format *ggg*

          Du kannst im SELECT-Statement mit Datumsfunktionen angeben, welches Ausgabeformat du möchtest. Für das Schreiben in die Datenbank könntest du entsprechendes benutzen, oder mit deiner Programmiersprache das Datumsformat "passend" herrichten. Natürlich kannst du auch die Ausgabe des Datums dort realisieren.

          Genau! Jetzt hab ich die Lösung *freu* Ich dachte eh schon daran, für die Eingabe 3 Felder zu benutzen. Also mit den Strings $tag, $monat und $jahr. Und wenn das Formular abgeschickt wird, wird das Datum eben als "$jahr-$monat-$tag" in die Datenbank eingetragen.

          Auch beim Suchen kann ich dann die Eingabe so abwandeln :o)

          Vielen Dank! Genau den Anreiz hab ich gebraucht :o)

          lg, Jan