Seite 1 von 1

Zeitfehler

Verfasst: 04.06.2005, 11:43
von jeep42
Hallo,

die folgende SQL Ausführung hat einen Fehler denn Sie löscht alle Mitglieder die sich noch nie eingeloggt haben 0000.00.00 bis 5 Tage :lol:

Mitglieder die aber über 5 Tage noch nie eingeloggt waren löscht die SQL Ausführung nicht 8)

Dabei sollte die SQL Ausführung genau das Gegenteil machen Sie soll alle Mitglieder löschen die sich noch nie 5 Tage nach dem Anmeldedatum eingeloggt haben.

Was muss ich ändern das es richtig funzt?

$query = "Delete FROM Userdaten WHERE `lastlogin` = '0000-00-00'
AND TO_DAYS(anmeldedatum) + 5>= TO_DAYS(NOW())";
mysql_db_query($dbname,$query,$conn) or die (mysql_error());


Von der Logik her einfach das > auf < ändern wenn man das im Bezug die ausgeführte SQL Ausführung definiert...

Aber das wieder spricht sich vollkommen entgegen der mathematischen Logik entsprechen .... ich denke zu 100 % der Fehler liegt woanders aber wo?

Verfasst:
von

Zeitfehler

Verfasst: 04.06.2005, 13:00
von Outman
Hallo,

um Dir helfen zu können, sollten wir noch wissen in welchen Format das Feld TO_DAYS hat.

mfg. Nico

Re: Zeitfehler

Verfasst: 04.06.2005, 13:07
von jeep42
Outman hat geschrieben:Hallo,

um Dir helfen zu können, sollten wir noch wissen in welchen Format das Feld TO_DAYS hat.

mfg. Nico

TO_DAYS ist weder eine tabelle noch einen Spalte bzw ein Feld sondern als Befehl in der obigen SQL Ausführung

Re: Zeitfehler

Verfasst: 04.06.2005, 13:55
von Outman
jeep42 hat geschrieben:
Outman hat geschrieben:Hallo,

um Dir helfen zu können, sollten wir noch wissen in welchen Format das Feld TO_DAYS hat.

mfg. Nico

TO_DAYS ist weder eine tabelle noch einen Spalte bzw ein Feld sondern als Befehl in der obigen SQL Ausführung
Hallo,

habe mir leider nicht genau den Sql angesehen. :)

So müste es gehen:

$query = "Delete FROM Userdaten WHERE `lastlogin` = '0000-00-00'
AND (TO_DAYS(NOW()) - 5) >= TO_DAYS(anmeldedatum)";
mysql_db_query($dbname,$query,$conn) or die (mysql_error());

mfg. Nico

Zeitfehler

Verfasst: 04.06.2005, 15:10
von jeep42
Hallo Nico,

Super funktioniert vom feinsten habe die Datei manuel ausführen binnen Sekunden war alles fertig :D

Werde dann einen Cronjob einrichten alles weitere geht dann automatich :D :D

Habe aber noch ein kleines mathematisches Timeproblem ...

Also eine Tabelle mit den Namen Posteingang hat unter anderem die Spalten User, Nachrichten und Timestamp.

Damit sich die SQL nicht aufbläht wie Luftballon will ich alle Nachrichten löschen lassen die älter als 31 Tage im Timestamp festgehalten sind ...

Kurze Erklärung der Spalten...

1.) User -> Hier ist die ID des Mitglieds in der Spalte festgehalten

2.) Nachrichten -> Hier sind die Nachrichte des jeweiligen Mitglied festgehalten

3.) Hier ist der Timpstamp der jeweiligen Nachricht festgehalten, der Timestamp ist wie folgend in der Spalte festgehalten: zb 12.02.2005

Im Prinzip müsste das so gehen löschen der Nachricht wenn diese grösser als 31 tage im Bezug dauf dem Timestamp ist :D

Bloss wie codet man das dass ist eben mein Problem ..

Die SQl Ausführung müsste so beginnen:

$query = "Delete FROM Posteingang WHERE ???????????????";
mysql_db_query($dbname,$query,$conn) or die (mysql_error());

Würde mich riesig freuen wenn Du mir weiter helfen könntest komme einfach mit den Time Problem nicht klar.

Besten Dank schon mal im vorraus

Zeitfehler

Verfasst: 04.06.2005, 15:40
von Outman
Hallo,

z.b. bei einen richtigen Timestamp der mit time(); erzeugt wird:

$sql="DELETE FROM Posteingang WHERE UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(Timestamp) > 2678400";
mysql_query($sql,$db) or die(mysql_error() . '<BR><i>' . $sql . '</i>');

z.b. bei einen Timestamp im Format 12.02.2005 erzeugt wird:

$sql="DELETE FROM Posteingang WHERE TO_DAYS(NOW()) - 31) >= TO_DAYS(Timestamp)";
mysql_query($sql,$db) or die(mysql_error() . '<BR><i>' . $sql . '</i>');

mfg. Nico