Select Query mit Datumsfilter

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

  • Select Query mit Datumsfilter

    Hi

    Hab mal ne Frage. Und zwar hab ich einen MySql String, der wie folgt aussieht:
    PHP-Code:
    $sql "SELECT post_id, post_subject, post_text FROM table 
            WHERE post_subject LIKE 'd.m.y%'"

    Ich möchte damit alle Datensätze auslesen, deren post_subject mit einem Datum im Format "d.m.y" anfängt. Blöderweise findet er dabei keinen Datensatz obwohl einer vorhanden ist. Wenn ich aber 'd.m.y%' durch '30.09.07%' ersetze (das is das Datum was im Datensatz steht) dann funktioniert es.

    Wie geht das?

  • #2
    PHP-Code:
    $sql "SELECT post_id, post_subject, post_text FROM table 
            WHERE post_subject LIKE '%.%.%'"

    und so ?
    "Nicht jeder Mensch kann und soll Programmieren[...]".

    Kommentar


    • #3
      Stimmt wäre ne einfache Lösung. Aber geht das nicht auch anders?

      Kommentar


      • #4
        Mit Sicherheit aber warum
        "Nicht jeder Mensch kann und soll Programmieren[...]".

        Kommentar


        • #5
          Regex kann auch mysql - Manual weiß Rat.
          (Ist natürlich dann ein Fullselect und demnach tödlich für jeden Server...)

          Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

          bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
          Wie man Fragen richtig stellt

          Kommentar


          • #6
            Weil ich nur die filtern möchte, die mit einem Datum anfangen. Mit obiger Lösung kommen aber auch die, die ein Datum mitten drin haben

            Edit: Ok hab ne einfache Lösung für das Problem gefunden. Ich nehme einfach beim WHERE nur die ersten 8 Zeichen und vergleiche sie mittels LIKE mit '%.%.%', somit sind nur die dabei, die das Datum am Anfang haben. Danke euch

            PHP-Code:
            $sql "SELECT post_id, post_subject, post_text FROM table 
                    WHERE LEFT(post_subject,8) LIKE '%.%.%'"

            Zuletzt geändert von KRambo; 02.10.2007, 12:02.

            Kommentar


            • #7
              Ein Datum hat mit den Punkten aber 10 Stellen

              P.S. Ich weiß es ist Wurst
              "Nicht jeder Mensch kann und soll Programmieren[...]".

              Kommentar


              • #8
                Naja eigentlich schon aber in meinem Fall hat das Datum immer das Format d.m.y somit sind es nur 8 Stellen weil das Jahr nur aus 2 Stellen besteht

                Kommentar


                • #9
                  Original geschrieben von KRambo
                  Edit: Ok hab ne einfache Lösung für das Problem gefunden. Ich nehme einfach beim WHERE nur die ersten 8 Zeichen und vergleiche sie mittels LIKE mit '%.%.%', somit sind nur die dabei, die das Datum am Anfang haben. Danke euch
                  Einfach für dich. Der Datenbank-Server macht ein Fullselect.

                  Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                  bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                  Wie man Fragen richtig stellt

                  Kommentar


                  • #10
                    Was ist eigentlich genau ein Fullselect? Kenne mich mit SQL schon ein wenig aus, allerdings liegt meine Erfahrung eher beim MS SQL Server, von daher is das ein wenig neu für mich.

                    Wenn man es nicht anders machen kann bleibt mir auch nichts anderes. Zumindest kann ich mich über die Geschwindigkeit der Abfrage nicht beklagen, die Seite wird sehr schnell geladen.

                    Sind aber auch immer nur wenige Datensätze, vor allem hab ichs über die Kriterien ja schon stark eingeschränkt. Er hat dann im Normalfall nur 1-5 Datensätze, die er durchsuchen muss.

                    Kommentar


                    • #11
                      Original geschrieben von KRambo
                      Er hat dann im Normalfall nur 1-5 Datensätze, die er durchsuchen muss.
                      Da kannst du die Performance vernachlässigen. Dann würde ich aber auch mit einem REGEXP das Format genauer einschränken:
                      Code:
                      WHERE post_subject REGEXP '^[0-3][[:digit:]]\.[01][[:digit:]]\.[[:digit:]]{2}'";
                      Gruss
                      H2O

                      Kommentar


                      • #12
                        Was ist eigentlich genau ein Fullselect?
                        Fullselect heißt, dass alle Datensätze ausgelesen und dann auf entsprechende Kriterien durchsucht werden. Das versucht man normalerweise mit einem Index zu verhindern, diesen kann der MySQL Server deutlich schneller durchsuchen.
                        Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                        Kommentar


                        • #13
                          Achso alles klar danke. Da die Datensätze aber schon arg eingegrenzt sind spielt das bei mir ja keine Rolle. Und Indizes kenn ich schon vom SQL Server

                          Werd den Regexp mal versuchen.

                          Edit: funzt perfekt, danke!
                          Zuletzt geändert von KRambo; 03.10.2007, 11:44.

                          Kommentar

                          Lädt...
                          X