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...

)
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?
