nach "Datetime" auslesen - Sql Where Abfrage

CoverUnder

Mitglied
Guten Morgen,

ich mal wieder... und gleich zu Anfangs mit meinem üblichen Titelproblem. Sollte jemand eine Idee für einen aufschlussreicheren Titel haben, editiere ich ihn gerne!

Aber nun zu meinem Problem:

Ich habe in einer Datenbanktabelle ein Feld, wo das Datum mittels "datetime" abgespeichert wird. Somit habe ich Datensätze mit dem Inhalt NULL oder Datumsangaben im Format von "2004-10-21 19:40:28".

Nun möchte ich alle Datensätze auslesen, bei denen das Datum älter als eine Woche ist. Möglich muss es schon sein, oder? Aber ich habe leider absolut keine Idee wie man das am besten macht, vor allem, weil das ja alles in den WHERE-Bereich der Abrage muss - da kann ich auch keinen zeilenlangen Code hinein quetschen?
Ich dachte mir am ehesten mal generell ein Timestamp zu erzeugen, das eine Woche alt ist (also aktuelles Timestamp minus einer Woche). Damit ich mal einen Anhaltspunkt habe. Und dann müsste ich in der Where-Abfrage das Datum mittels strtotime(); in ein Timestamp umwandeln und dann schauen, welches Timestamp in der Datenbank kleiner gleich mein zuvor generiertes Timestamp ist...? Aber das kann ich nicht alles in den WHERE-Bereich packen, oder? Irgendwie erschließt sich mir das nicht ganz... vor allem: Kann ich im WHERE-Bereich überhaupt das datetime in ein Timestamp umwandeln und dann mit dem Timestamp Wert weiter machen?

Vielleicht kann jemand ein Stichwort oder eine andere Hilfestellung eben in den Raum werfen, an der ich weiter knabbern kann? Wäre wirklich dankbar!

Liebe Grüße
 
Hmmm... irgendetwas streikt. Es fragt sich nur was. Eine Fehlermeldung habe ich leider nicht, nur eine weiße Seite. Hab es mit

PHP:
error_reporting(E_ALL);
ini_set('display_errors', 1);

versucht, aber trotzdem keine Meldung.
Hier der Code - wenn, dann muss hier der Hund begraben sein, denn der Rest wurde nicht verändert:

PHP:
$sql="SELECT
k.id,
i.datefield
FROM
tbl1 AS i,
tbl2 AS k LEFT JOIN tbl3 AS b ON k.id = b.id
WHERE datefield < DATE_SUB(NOW() , INTERVAL 7 DAY)
AND 
b.id IS NULL 
ORDER BY datefield ASC";
 
ERstens:

PHP:
mysql_query($sql) or die (mysql_error());

zweitens:

heist dein Feld auch "datefield" das habe ich in meinem Beitrag nur so genannt weil ich deine Tabellenstruktur nicht kenne.
 
Den Feldnamen hab ich im Script angepasst und nur hier wieder geändert - fürs schnellere Verständnis, hab ich deinen Namen dann wieder übernommen.

Aber nach einem erneuten Versuch bekomme ich jetzt eine Meldung, allerdings keine PHP Fehlermeldung, sondern:

Code:
Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, [no address given] and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

Interpretiere ich das richtig, wenn ich sage, dass das Script wohl funktioniert, aber der Server es nicht gebacken kriegt? Sprich, die Abfrage "zu groß" ist?
 
Schau doch mal ins ErrorLog deines Apachen.
Irgendwo hast in PHP nen Fehler mit drinne.
Zeig doch mal den kompletten Abschnitt wo du die Abfrage ausführst und die entsprechende Schleife dazu.
 
Ich glaube nicht, dass ich den ErrorLog einsehen kann? :/

Okay, hier der komplette Abschnitt:


PHP:
// Liest die Kunden aus, die in der Tabelle orders nicht vorkommen
$sql="SELECT
k.customers_id,
k.customers_firstname,
k.customers_lastname,
k.customers_gender,
k.customers_email_address,
k.customers_date_added,
i.customers_info_date_of_last_logon
FROM customers_info AS i,
customers AS k LEFT JOIN orders AS b ON k.customers_id = b.customers_id
WHERE customers_info_date_of_last_logon < DATE_SUB(NOW() , INTERVAL 7 DAY)
AND
b.customers_id IS NULL 
ORDER BY customers_info_date_of_last_logon ASC";
$res = mysql_db_query($mysqldb, $sql, $mysql);
while ($row = mysql_fetch_assoc($res)) {
    
    $customers_id = $row['customers_id']; 
    $customers_firstname = $row['customers_firstname'];
    $customers_lastname = $row['customers_lastname'];
    $customers_gender = $row['customers_gender'];
    $customers_email_address = $row['customers_email_address'];
    $customers_date_added = $row['customers_date_added'];
    
    //Pr&uuml;ft das Geschlecht
    if($customers_gender == "m")
    {
      $customers_gender = "Herr";
    }
    elseif($customers_gender == "f")
    {
      $customers_gender = "Frau";
    }
    
    //Schaut, ob Sachen im Warenkorb sind
    $anzahl_sql = mysql_db_query("$mysqldb", "SELECT * FROM customers_basket WHERE customers_id = '$customers_id'"); 
   $anzahl = mysql_num_rows($anzahl_sql);
   
   if($anzahl != '0')
   { $wako = "JA"; }
   else { $wako = "Nein"; }
   
   
   
   
    
    include("kundenliste.html");
    
    }
 
PHP:
mysql_db_query("$mysqldb")
// müsste das nicht so aussehen?
mysql_db_query($mysql_db)

Und lass dir bitte wenn der Query nicht funktioniert die Fehlermeldung dazu ausgeben:

PHP:
$res = mysql_db_query($mysqldb, $sql, $mysql) or die("Error:\r Query: ".$sql."\r\r Error-Message: "   mysql_error());
 
Vielen Dank!
Die Meldung kommt nun nicht mehr - bin aber wieder bei der weißen, leeren Seite - trotz mysql_error ()); und error_reporting(E_ALL); sowie ini_set('display_errors', 1);
 
Dann hast du einen syntaktischen Fehler wahrscheinlich sehr direkt am Anfang der Datei.

Entweder, du postet die komplette Datei oder kommst irgendwie an die Server-Logs ran.
 
Zurück