Seite 1 von 1

[erledigt] MySQL Abfrage klappt nicht

Verfasst: 12.08.2006 11:38
von dani1
Hallo,

folgende MySQL Abfrage klappt nicht wie sie sollte, weiß jemand warum?
Diese löscht alle unaktiven User aus der Datenbank, wobei dies erst nach 72 Std. geschehen sollte.

Code: Alles auswählen

DELETE FROM `phpbb_users`
WHERE `user_active` = 0
AND `user_regdate` < ( NOW() - ( 72*3600 ) )
AND `user_actkey` != ''
AND `user_id` != -1 

Verfasst: 12.08.2006 12:43
von PhilippK
Schau dir mal die Doku von MySQL an. MySQL verwendet nicht das UNIX-Datumsformat sondern ein eigenes (yyyy-mm-dd hh:mm:ss). Daher bekommst du auch bei NOW() nichts zurück, von dem du dann eine bestimmte Zeit abziehen kannst.
Du musst NOW() vorher in das UNIX-Format umwandeln, damit das geht.

Gruß, Philipp

Verfasst: 12.08.2006 12:49
von Fähnchen
Was genau funktioniert da denn nicht?
Eine genauere Fehlerbeschreibung wäre hilfreich.
In welcher Variable speicherst du denn das user_regdate?

Verfasst: 12.08.2006 13:35
von roger
Anstelle von NOW() würde ich die Funktion UNIX_TIMESTAMP() benutzen...
(denn die ganzen Zeitangaben werden in der DB als "Unix-Zeit" gespeichert...)


roger

PS.: `user_regdate` ist eine Variable der Tabelle _users...

Verfasst: 12.08.2006 14:08
von Miriam
Houston........we have a problem.

Also nicht wir, sondern Du, Dani.

Wenn Du das machen möchtest -->

Code: Alles auswählen

DELETE FROM `phpbb_users`
WHERE `user_active` = 0
AND `user_regdate` < ( NOW() - ( 72*3600 ) )
AND `user_actkey` != ''
AND `user_id` != -1
wobei Du es vielleicht so lösen solltest:

Code: Alles auswählen

$sql = "DELETE FROM " . USERS_TABLE . "
WHERE `user_active` = 0
AND `user_regdate` < ( " . time() - ( 72*3600 ) . " )
AND `user_actkey` != ''
AND `user_id` != -1";
... ist Dein erster Admin nach 72 Stunden Abwesenheit tot.... denn der hat die ID 2 (okay... nur bei vorheriger Deaktivierung... aber trotzdem).
Besser wäre:

Code: Alles auswählen

$sql = "DELETE FROM " . USERS_TABLE . "
WHERE `user_active` = 0
AND `user_regdate` < ( " . time() - ( 72*3600 ) . " )
AND `user_actkey` != ''
AND `user_id` > 2";

Verfasst: 12.08.2006 14:17
von roger
Hallo Miriam,

wobei time() das php-Äquivalent für die MySQL-Funktion UNIX_TIMESTAMP() ist...
Ich finde die Zeile

Code: Alles auswählen

AND `user_regdate` < ( UNIX_TIMESTAMP() - ( 72*3600 ) )
"sauberer"... (aber darüber lässt sich sicher streiten... :wink: )

roger

Verfasst: 12.08.2006 16:41
von dani1
Ups, was war hier denn los?

So, ich möchte das ganze per Cron ausführen. Dazu habe ich eine Datei namens user.sql erstellt und testweise folgendes am laufen:

Code: Alles auswählen

DELETE FROM phpbb_users
WHERE `user_active` = 0
AND `user_regdate` < ( " . time() - ( 72*1 ) . " )
AND `user_actkey` != ''
AND `user_id` > 2
Dieser Befehl löscht mir jetzt jedoch nicht den User den ich gerade (vor ca. 5 min) angelegt habe. Weshalb ?

Danke schonmal, Ihr seid klasse !

Verfasst: 12.08.2006 16:51
von dani1
Oh, so gehts:

Code: Alles auswählen

DELETE FROM phpbb_users
WHERE `user_active` = 0
AND `user_regdate` < ( UNIX_TIMESTAMP() - ( 72*3600 ) )
AND `user_actkey` != ''
AND `user_id` > 2
Vielen, vielen Dank Jungs und Mädels !!!

Hallo

Verfasst: 12.08.2006 16:58
von Atti
Hallo
Sorry ja ihr erklärt das alles so schön hier,von wegen mann muss die zeit auf unix umstellen, und die HTML code so oder so einsetzen ??!!!

Na ja ich bin neu was ich damit sagen will eure erkläreungen nützen mir nichts weil ich nicht weiss wo ich das einfügen oder ändern muss?
Welche datei welchche stelle usw..??!!

Gruss Atti

Verfasst: 12.08.2006 17:05
von Miriam
Atti, was möchtest Du denn machen? :o