Ankündigung

Einklappen
Keine Ankündigung bisher.

Probleme mit mysql-query

Einklappen

Neue Werbung 2019

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

  • Probleme mit mysql-query

    Hallo zusammen!

    Ich m�chte einen Geburtstagskalender machen.

    Man soll (unter anderem) auch einstellen k�nnen, welche Geburtsatage man sehen will, zb alle zwischen 31.08 und 31.12.

    Ich hab schon viel rumgesucht, und auch hier bin ich auf Ans�tze gesto�en, aber ich hab's noch nicht ganz geschafft.

    Hab bisher zwar eine Abfrage geschafft, aber die ist noch nicht ganz korrekt...
    PHP-Code:
    <?
    $mysql = "SELECT IDENT, FAMNAME, VORNAME, TITEL2, NAME2A, GEB_DATUM, EMAIL FROM vkstamm
    WHERE GEB_DATUM BETWEEN ADDDATE('$datum_anfang', INTERVAL 1 DAY) AND 
    ADDDATE('$datum_ende', INTERVAL 1 DAY) ORDER BY GEB_DATUM";
    ?>
    --> $datum_anfang und $datum_ende sind w�hlbar
    Man muss aber bei dieser Methode immer auch ein Jahr angeben, ich hab also einfach bei anfang das Jahr 1000 und bei ende das aktuelle Jahr angegeben, aber das macht die Abfrage irgendwie sinnlos, da ja alle Geburtstage zwischen diesen Jahrenliegen, und somit auch alle angezeigt werden...

    Wie muss ich den query ab�ndern, damit das Jahr egal ist, nach den Monaten und Tagen gesucht wird und somit die Abfrage einen Sinn ergibt ?
    (GEB_DATUM ist date YYYY.MM.DD)

    Vielen dank im Vorraus f�r jede Antwort!

  • #2
    Hab noch weiter rumgesucht und hab meinen Code jetzt etwas geändert:
    PHP-Code:
    <?
    $mysql = "SELECT IDENT, FAMNAME, VORNAME, TITEL2, NAME2A, GEB_DATUM, EMAIL FROM vkstamm 
    WHERE GEB_DATUM BETWEEN date('$datum_anfang') 
    AND date('$datum_ende') ORDER BY GEB_DATUM";
    ?>
    --> ist jetzt besser (übersichtlicher) aber immer noch nicht das was ich suche...

    Ich müsste irgendwie sowas wie BETWEEN LIKE einbauen, also sowohl zwischen den Zeiträumen, als auch egal welches Jahr...
    (BEETWEEN LIKE geht nicht)

    Weiß keiner wie sowas geht?

    Kommentar


    • #3
      Du solltest vielleicht übetr den Aufbau der Tabelle nochmal nachdenken.
      Wär doch einfacher, wenn du eine Spalte für Tag, eine für Monat und eine für Jahr hast.

      @mods: Bitte nach MySQL verschieben.

      Kommentar


      • #4
        Das geht leider nicht, die Tabelle existiert schon lange, und wird auch von anderen Programmen verwendet, da darf ich nichts dran ändern...

        Es muss doch auch eine Möglichkeit geben, nur nach MM.DD zu suchen...

        Leider finde ich die nirgends...

        Weiß jemand wie man den query umschreiben kann, (eventuell ohne BETWEEN) und trotzdem das gewünschte Ergebnis (ein Zeitraum) dabei herauskommt?

        Kommentar


        • #5
          Du könntest auch alle Datensätze raussuchen lassen, und dann mittels PHP die raussortieren die zwischen x. und y. liegen.

          Kommentar


          • #6
            Hm, das klingt auch gut (zwar nicht so optmtimal, da ja alle Datensätze dann gesucht werden, aber für den Anfang mal nicht schlecht).

            Und wie mach ich das dann?

            Kommentar


            • #7
              Also der User gibt in zwei Textfelder je ein Datum IM Format tt.mm ein. Dann wird das ganze per get übergeben und wie folgt ausgwertet

              PHP-Code:
              <?php
              while($row mysql_fetch_object()$result)
              {
              if((
              date("n"strtotime($row->Geburtstag)) <= $_GET[monat1] AND date("n"strtotime($row->Geburtstag)) >= $_GET['monat2']) AND (date("j"strtotime($row->Geburtstag)) <= $_GET[tag1] AND date("j"strtotime($row->Geburtstag)) >= $_GET['tag2'])
              {
              echo 
              $row->name;
              }
              }
              ?>
              Habe ich jetzt nicht geteste!!!

              Kommentar


              • #8
                vielleicht so:
                PHP-Code:
                <?php
                $date_from 
                date('n.d'strtotime("2005-$_GET[monat1]-$_GET[tag1]"));
                $date_to =  date('n.d'strtotime("2005-$_GET[monat2]-$_GET[tag2]"));

                if((
                $date_from $date_to 12 0) + date('n.d'strtotime($birthday)) >= $date_from AND
                   
                date('n.d'strtotime($birthday)) <= $date_to)
                  echo 
                "jupp";
                ?>
                habs sogar ausprobiert!

                Kommentar


                • #9
                  Arbeite doch lieber mit Timestamps...
                  http://de.php.net/date
                  http://de.php.net/time
                  http://de.php.net/mktime

                  Kommentar

                  Lädt...
                  X