Löschen nur wenn Bedingung erfüllt

lifehunter

Erfahrenes Mitglied
Also ich will folgendes machen. Immer wenn man sich einloggt, wird gecheckt ob an diesem Tag die Datenbank schon aktualisiert wurde. Wenn dies nicht der Fall ist, wird dieses Script ausgeführt:
PHP:
<? 
$checkresult=mysql_query("SELECT `datum` FROM `systemcheck`");
$check=mysql_result($checkresult, 'datum');

$result=mysql_query("SELECT `ID` FROM `userdaten` WHERE `geb` between '$check' and now()");
for($i=0;$i<mysql_num_rows($result);$i++)
     $data[$i]=mysql_fetch_array($result);
for($i=0;$i<count($data);$i++){
     $ageresult=mysql_query("SELECT `age` FROM `profil` WHERE `ID`='".$data[$i]["ID"]."'");
     $age=mysql_result($ageresult, 'age');
     $age=$age++;
     mysql_query("UPDATE `profil` SET `age`='$age' WHERE `ID`='".$date[$i]["ID"]."'");
     }

$mailage = date("Y-m-d",mktime(0, 0, 0, date("m"), date("d")-1, date("Y")));
$mailold = date("Y-m-d",mktime(0, 0, 0, date("m"), date("d")-2, date("Y")));

//gelesene Nachrichten löschen
mysql_query("DELETE `inbox` WHERE `date`<$mailage AND `lesen`>'0'");
mysql_query("DELETE `outbox` WHERE `date`<$mailage AND `lesen`>'0'");

//ungelesene Nachrichten löschen
mysql_query("DELETE `inbox` WHERE `date`<$mailold");
mysql_query("DELETE `outbox` WHERE `date`<$mailold");

mysql_query("UPDATE `systemcheck` SET `datum`=now()");
?>
Zur Erklärung: Als erstes wird das Datum des letzten Checks ausgelesen. Dann werden alle User ausgegeben welche seit dem letzten Check Geburstag hatten. Deren Alter soll um 1 hochgezählt werden.
Der 2. Teil löscht alle Nachrichten die älter als 1 bzw. 2 Monate alt sind.

Also das mit dem Alter konnte ich bisher noch nicht testen, weil bisher keiner Geburtag hatte. Nachrichten die alt genug sind gibt es aber. Leider werden die aber nicht gelöscht. Das Script wird ausgeführt. Das merke ich daran dass das Datum in der Tabelle "systemcheck" erneuert wird.
Kann mir da jemand weiterhelfen?!
Danke im Vorraus
MfG
 
Zuletzt bearbeitet:
selbst nach dieser Änderung klappt es net :(

PHP:
mysql_query("DELETE `inbox` WHERE `date` between $mailage and now() AND `lesen` IS NOT '0'");
mysql_query("DELETE `inbox` WHERE `date` between $mailold and now()");
mysql_query("DELETE `outbox` WHERE `date`between $mailage and now() AND `lesen` IS NOT '0'");
mysql_query("DELETE `outbox` WHERE `date` between $mailold and now()");
 
Wenn du mit mysql_error() arbeiten würdest, wäre der Fehler gleich gefunden. Mehr sag ich dazu nicht.
 
Hab jetzt diese Änderung vorgenommen:
PHP:
$now=date("Y-m-d");
mysql_query("DELETE `inbox` WHERE `date` between '$mailage' and '$now' AND `lesen` IS NOT '0'") or die("error1: " . mysql_error());
mysql_query("DELETE `inbox` WHERE `date` between '$mailold' and '$now'")or die("error2: " . mysql_error());
mysql_query("DELETE `outbox` WHERE `date`between '$mailage' and '$now' AND `lesen` IS NOT '0'") or die("error3: " . mysql_error());
mysql_query("DELETE `outbox` WHERE `date` between '$mailold' and '$now'") or die("error4: " . mysql_error());
Er gibt diesen Fehler aus:
Code:
error1: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE `date` between '2005-08-10' and '2005-08-12' AND `lesen`
Den Fehler finde ich nun trotzdem net :(
 
Soweit ich weiß, muss die Abfrage (nennt man das dort auch so?) bei einem Löschvorgang
DELETE FROM tabelle WHERE ...
lautet
 
fehler gefunden:
PHP:
mysql_query("DELETE FROM `inbox` WHERE `date` > '$mailage'  AND `lesen` > '0'") or die("error1: " . mysql_error());
mysql_query("DELETE FROM `inbox` WHERE `date` > '$mailold'")or die("error2: " . mysql_error());
mysql_query("DELETE FROM `outbox` WHERE `date` > '$mailage' AND `lesen` > '0'") or die("error3: " . mysql_error());
mysql_query("DELETE FROM `outbox` WHERE `date` > '$mailold'") or die("error4: " . mysql_error());
So muss des aussehen.

So das mit dem löschen geht, aber wie mach ich des mit dem Alter hochzählen? Eben ist mir aufgefallen das ich bei der Abfrage, nach Einträgen suche die zb zwischen 2005-05-01 und 2005-08-12 Geburstag haben.
Aber eigentlich muss man ja nur nach dem Tag und Monat suchen. Wie mach ich das denn? Also das Gebursdatum ist so in die Datenbank geschrieben
Beispiel: 2005-08-12
Wenn jemand ne Lösung hat bitte melden! ^^
 
Zuletzt bearbeitet:
ich habe eben mal nach dieser Funktion gesucht jedoch nix gefunden. Kann man mir da vielleicht jemand weiterhelfen? Am besten ein Beispiel wiedergeben ^^
 

Neue Beiträge

Zurück