Compu: mysql / php4 - Anzeige von Info eines bestimmten Datums

Hi,

ich möchte nur aktuelle News auf unsere Seite anzeigen lassen. Ältere Artikel auf Verlangen.

Mein aktuelles SQL Statement lautet:

$sql = "SELECT * FROM news
        WHERE (d_datum_termin !='')
 ORDER BY d_datum_termin DESC";

Wie muss ich das abändern, so dass Termine die in der Vergangenheit liegen nicht mit angezeigt werden?

C

  1. Halihallo Compu

    ich möchte nur aktuelle News auf unsere Seite anzeigen lassen. Ältere Artikel auf Verlangen.

    Was heisst aktuell? - An welchem Kriterium nagelst du dies fest?

    $sql = "SELECT * FROM news
            WHERE (d_datum_termin !='')
     ORDER BY d_datum_termin DESC";

    was soll das != '' ? - Diese Bedingung wird _nie_ erfüllt sein.

    Wie muss ich das abändern, so dass Termine die in der Vergangenheit liegen nicht mit angezeigt werden?

    WHERE d_datum_termin >= "2003-04-29"

    z. B. gibt alle Termine vor dem 29.04.2003 _nicht_ aus.

    Viele Grüsse

    Philipp

    1. Hi Aktuell heißt alles was älter ist als das heutige Datum sollte nicht erscheinen.

      $sql = "SELECT * FROM news
              WHERE (d_datum_termin !='')
       ORDER BY d_datum_termin DESC";

      was soll das != '' ? - Diese Bedingung wird _nie_ erfüllt sein.

      Nein, das ist die ältere Version. Ich habe das so geregelt, dass wenn kein Eintrag in der Datumsspalte ist, die Nachrichtenüberschrift nicht angezeigt wird.

      WHERE d_datum_termin >= "2003-04-29"

      z. B. gibt alle Termine vor dem 29.04.2003 _nicht_ aus.

      Ja, aber ich möchte die SQL Instrruction nicht jeden Tag mit dem aktuellen Datum aktualisieren müssen.

      Compu

      1. Halihallo Compu

        was soll das != '' ? - Diese Bedingung wird _nie_ erfüllt sein.

        Nein, das ist die ältere Version. Ich habe das so geregelt, dass wenn kein Eintrag in der Datumsspalte ist, die Nachrichtenüberschrift nicht angezeigt wird.

        Es gibt immer einen Eintrag, sei er NULL, 0, '' oder ein anderer Default-Wert. Aber
        drinne steht immer etwas. Nur, dass standardmässig bei DATETIME Typen die oben genannte
        Bedingung _nie_ erfüllt sein wird.

        WHERE d_datum_termin >= "2003-04-29"
        z. B. gibt alle Termine vor dem 29.04.2003 _nicht_ aus.

        Ja, aber ich möchte die SQL Instrruction nicht jeden Tag mit dem aktuellen Datum aktualisieren müssen.

        http://www.mysql.com/doc/en/Date_and_time_functions.html dort wirst du deines
        Problem's Lösung fündig.

        @Bastian: Datentyp TIMESTAMP speichert die Sekunden seit 1970 nur _intern_, extern wird
        es jedoch als '20030429114432' ausgegeben... aufgepasst!

        Viele Grüsse

        Philipp

        1. Hi, nein also die Zeit ist nicht wichtig. Nur das Datum.
          Hier ist ein Auszug aus dem Script.
          Ich habe anstelle der time- Funktion die Date Funktion benutzt, aber es haut nicht hin.
          Muss ich das Datum noch umwandeln?

          <?php
          $now = date();
          if (!isset($_GET['details']))
          {
           echo "<h1>Termine:</h1>";

          if (isset($_GET['mehr']))
           {
            $sql = "SELECT * FROM news
                       WHERE (d_datum_termin !='')
                       ORDER BY d_datum_termin DESC";
           }
           else
           {
               $sql = "SELECT * FROM news
                       WHERE (d_datum_termin !='')
              AND   (d_datum_termin >=$now)
                    ORDER BY d_datum_termin DESC";
           }

          $result = @mysql_query($sql,$dbConnection);

          $ueberschrift = "d_".$language."_ueberschrift";
           $zusammenfassung = "d_".$language."_zusammenfassung";

          echo "<table width="100%" border="0" cellspacing="0" cellpadding="5" align="center">\n";
           echo "<tr>\n";
           echo "<td>\n";
           while ($row = @mysql_fetch_array($result))
           {

          $dateGerman = explode("-",$row[d_datum_termin]);
             $dateGerman = $dateGerman[2].". ".$dateGerman[1].". ".$dateGerman[0];
             if (($row[$ueberschrift] !="") && ($row['d_datum_termin']!=""))
             {
               echo "<b>".$dateGerman."</b><br><a href="".$filename."?details=".$row[$ueberschrift]."">".$row[$ueberschrift]."<br></a>\n";
             }
           }
           if (!isset($_GET['mehr']))
           {
            echo "<a href="".$filename."?mehr=TRUE"."">ältere Termine anzeigen</a>";
           }
           echo "</td>\n";
           echo "</tr>\n";
           echo "</table>\n";
          ?>

          1. Halihallo Compu

            Hi, nein also die Zeit ist nicht wichtig. Nur das Datum.

            Ich weiss und habe IMHO nichts gegenteiliges behauptet.

            Ich habe anstelle der time- Funktion die Date Funktion benutzt, aber es haut nicht hin.
            Muss ich das Datum noch umwandeln?

            Ich würde die Funktion von MySQL empfehlen, den Link für Lektüre diesbezüglich hast du
            im letzten Posting erhalten.
            Für PHP's date gibt es http://www.php.net/manual/de/function.date.php.

            Viele Grüsse

            Philipp

            1. Hi Leute,

              wer kann mir dieses Phänomen erklären?
              Ich bekomme das aktuelle Datum mit der Date-Funktion als "040429"
              und vergleich es mit dem Datum, dass in der Datenbank gespeichert ist als z.B 2003-02-21.

              Er vergleicht in der 2. SQL Anweisung korrekt. Aber warum?
              Oder ist das ein Zufall, denich nicht raffe und habe später dann einen Bug drin!??! :-)(

              Hier ist "funzende" der Quellcode:

              <?php
              $now = date(ymd);
              if (!isset($_GET['details']))
              {
               echo "<h1>Termine:</h1>";
               if ($_GET['mehr']=="TRUE")
               {
                echo "<a href="".$filename."?mehr=FALSE"."">[ältere Termine ausblenden]</a>";
               }
               else
               {
                echo "<a href="".$filename."?mehr=TRUE"."">[ältere Termine anzeigen]</a>";
               }

              if ($_GET['mehr']=="TRUE")
               {
                $sql = "SELECT * FROM news
                           WHERE (d_datum_termin !='')
                           ORDER BY d_datum_termin DESC";
               }
               else
               {
                   $sql = "SELECT * FROM news
                           WHERE (d_datum_termin !='')
                  AND   (d_datum_termin >=$now)
                        ORDER BY d_datum_termin DESC";
               }

              $result = @mysql_query($sql,$dbConnection);

              $ueberschrift = "d_".$language."_ueberschrift";
               $zusammenfassung = "d_".$language."_zusammenfassung";

              echo "<table width="100%" border="0" cellspacing="0" cellpadding="5" align="center">\n";
               echo "<tr>\n";
               echo "<td>\n";
               while ($row = @mysql_fetch_array($result))
               {
                 $dateGerman = explode("-",$row[d_datum_termin]);
                 $dateGerman = $dateGerman[2].". ".$dateGerman[1].". ".$dateGerman[0];
                 if (($row[$ueberschrift] !="") && ($row['d_datum_termin']!=""))
                 {
                   echo "<b>".$dateGerman."</b><br><a href="".$filename."?details=".$row[$ueberschrift]."">".$row[$ueberschrift]."<br></a>\n";
                 }
               }
               echo "</td>\n";
               echo "</tr>\n";
               echo "</table>\n";

              1. Halihallo Compu

                Ich bekomme das aktuelle Datum mit der Date-Funktion als "040429"
                und vergleich es mit dem Datum, dass in der Datenbank gespeichert ist als z.B 2003-02-21.
                Er vergleicht in der 2. SQL Anweisung korrekt. Aber warum?
                Oder ist das ein Zufall, denich nicht raffe und habe später dann einen Bug drin!??! :-)

                http://www.mysql.com/doc/en/DATETIME.html, Daten[1] kann man in MySQL auf
                verschiedene Weise eingeben. Dein 040429 ist eine gültige Schreibweise darunter. Wie
                MySQL deine Eingabe interpretiert steht unter obigem Link.

                [1] gemeint ist der Plural von Datum.

                Viele Grüsse

                Philipp

                1. Hallo Phillip,

                  ist es günstiger nur timestamp(8) in der Datenbank zu verwenden oder doch besser date?

                  Wenn ich nun den Typ der Spalte ändere, gehen dann die jetzigen Werte(Daten) verloren?

                  DANKE für die nette Hilfe.
                  Compu

                  1. Halihallo Compu

                    Heisst du Phillip? - Ansonsten bitte weiterhin unter Compu posten. Übrigens, ich heisse
                    "Philipp" :-)

                    ist es günstiger nur timestamp(8) in der Datenbank zu verwenden oder doch besser date?

                    Die erste TIMESTAMP einer Relation (Tabelle) hat in MySQL die Eigentschaft sich bei jedem
                    Ändern auf die aktuelle Zeit zu setzen. Wenn du dies willst bzw. dir darüber bewusst
                    bist, steht der Verwendung von TIMESTAMP ebensowenig im Wege, wie bei DATE.
                    DATE speichert nur das Datum! - Möchtest du auch die Zeit, dann verwende DATETIME.
                    DATETIME-Attribute brauchen jedoch 8 ganze Bytes, DATE braucht 3 und Timestamp braucht
                    vier Bytes. Mehr dazu unter: http://www.mysql.com/doc/de/Storage_requirements.html
                    Wenn du nur ein Datum speichern möchtest, würde ich zu DATE raten.

                    Wenn ich nun den Typ der Spalte ändere, gehen dann die jetzigen Werte(Daten) verloren?

                    In der Theorie Nein. Praxis: Mach vorher ein Backup bei grundlegenden Operationen auf
                    der Datenbank (oder eigentlich immer) :-)

                    DANKE für die nette Hilfe.

                    aber gerne :-)

                    Viele Grüsse

                    Philipp

                    1. Hi Phillip,

                      nein ich heiße nicht Phillip.
                      Hatte beim "Hi Phillip" wohl aus Versehen vorher in das Namensfeld geklickt. :-))))

                      Super, Danke für den Tipp. Ich brauche nur das Datum. Also werde ich es wohl so belassen. Und es soll sich ja auch nicht ändern.

                      Danke.

                      Compu

                2. Hallo Phillip,

                  ist es günstiger nur timestamp(8) in der Datenbank zu verwenden oder doch besser date?

                  Wenn ich nun den Typ der Spalte ändere, gehen dann die jetzigen Werte(Daten) verloren?

                  DANKE für die nette Hilfe.
                  Compu

  2. Das hängt ein wenig davon ab wie du Datum gespeichert hast, hier ein beispiel falls du timestamp benutzt (würde ich empfehlen)

    $now = time();

    $sql = "SELECT * FROM news WHERE (d_datum_termin >=$now) ORDER BY d_datum_termin DESC";