de.comp.lang.php.* FAQ

17.5. Wie kann ich die Datensätze der letzten 2 Wochen listen?

Keywords: SQL | Datenbank | MySQL | timestamp | aktuell

Antwort von Kristian Köhntopp

Ein vollständiges Beispiel folgt. Zunächst die Definition einer einfachen Tabelle mit einigen Werten:

mysql> create table beispiel (
    ->   id integer not null auto_increment primary key,
    ->   nutzlast varchar(80) not null,
    ->   changed timestamp not null );
Query OK, 0 rows affected (0.00 sec)

mysql> insert into beispiel ( nutzlast ) values ( "eins");
Query OK, 1 row affected (0.02 sec)

mysql> insert into beispiel ( nutzlast ) values ( "zwei");
Query OK, 1 row affected (0.00 sec)

mysql> insert into beispiel ( nutzlast ) values ( "drei");
Query OK, 1 row affected (0.00 sec)

mysql> select * from beispiel;
+----+----------+----------------+
| id | nutzlast | changed        |
+----+----------+----------------+
|  1 | eins     | 20000126204514 |
|  2 | zwei     | 20000126204517 |
|  3 | drei     | 20000126204520 |
+----+----------+----------------+
3 rows in set (0.02 sec)

mysql> update beispiel set changed = "20000101123456" where id = 2;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from beispiel where changed > "20000115000000";
+----+----------+----------------+
| id | nutzlast | changed        |
+----+----------+----------------+
|  1 | eins     | 20000126204514 |
|  3 | drei     | 20000126204520 |
+----+----------+----------------+
2 rows in set (0.02 sec)

mysql> quit
Bye

In diesem Beispiel ist eine Tabelle beispiel angelegt worden, die neben einer Nutzlastspalte mit dem Namen nutzlast auch noch einen automatisch vergebenen Primärschlüssel id und ein automatisch aktualisiertes Änderungsdatum enthält. Wir haben das Änderungsdatum für den Datensatz mit der Nummer 2 künstlich zurückgestellt.

Das folgende Beispielscript listet nun alle Datensätze, die in den letzten 2 Wochen geändert worden sind.

<?php

// Eigene Daten eintragen:
$dbhost = "localhost"; // DB-Server
$dbuser = "root";      // DB-Server Username
$dbpass = "...";       // DB-Server Passwort
$dbname = "...";       // Datenbank Name

// Mit DB-Server und Datenbank verbinden, bei Fehler Script beenden.
$db_link = @mysql_connect($dbhost, $dbuser, $dbpass);

if (! $db_link) {
    die("Fehler beim Verbinden mit Server '$dbhost' als '$dbuser' mit Passwort '$dbpass'.");
}

if (! mysql_select_db($dbname, $db_link)) {
    die("Fehler beim Verbinden mit der Datenbank $dbname");
}

// Zeitgrenze bestimmen (86400 Sekunden = 1 Tag).
$twoweeks = date("YmdHis", time() - 14*86400);

// Query generieren.
$query = "SELECT id,
                 nutzlast,
                 date_format(changed, '%Y-%m-%d %H:%i:%s') as changed
          FROM   beispiel
          WHERE  changed > $twoweeks";

$result = mysql_query($query, $db_link);

// Falls Query fehlerhaft, Script beenden.
if (! $result) {
    die("Fehler bei der Query: $query");
}

// Query senden, Resultat ausgeben.
while($avar = mysql_fetch_array($result)) 
{
    printf("%s - %s - %s\n",
            $avar['id'], $avar['nutzlast'], $avar['changed']);
}

// Speicher wieder freigeben und Verbindung zur DB schließen.
mysql_free_result($result);
mysql_close($db_link);

?>

Der Output des Scripts ist:

1 - eins - 2000-01-26 20:45:14
3 - drei - 2000-01-26 20:45:20

Valid HTML 4.01! Valid CSS!

17.5. Wie kann ich die Datensätze der letzten 2 Wochen listen?
http://www.php-faq.de/q/q-mysql-aenderungsdatum.html
Archiv der de.comp.lang.php-FAQ Dies ist eine Archivseite von 2008 und wurde seitdem nicht geändert. Das dclp-FAQ-Team