verfallene Datensätze löschen - DATETIME-Spalte als Kriterium
Matze
- datenbank
2 EKKi0 Texter mit x0 Matze
Hallo und Mahlzeit!
Ich habe eine MySQL-Tabelle für Benutzeranmeldungen mit einer DATETIME-Spalte.
Ich würde gern alle Einträge löschen, die älter als 1 Tag sind und deren User sich noch nicht angemeldet haben.
Ist diese Form korrekt oder gibt es dafür schon eine entsprechende MySQL-Funktion?
Kann MySQL Datumsangaben vergleichen?
$deltime = time()-86400;
$query = ("DELETE FROM users WHERE activ = 'N' && datum < '".date("Y.m.d H.i.s",$teltime)."'");
(Verbindung zur DB steht, Tabelle und Daten existieren, MySQL 5.1)
Danke für eure Hilfe!
Grüße, Matze
Mahlzeit Matze,
Ist diese Form korrekt oder gibt es dafür schon eine entsprechende MySQL-Funktion?
Nein, ja.
Kann MySQL Datumsangaben vergleichen?
Ja.
$deltime = time()-86400;
$query = ("DELETE FROM users WHERE activ = 'N' && datum < '".date("Y.m.d H.i.s",$teltime)."'");
Was hältst Du von den [Datums- und Zeitfunktionen](http://dev.mysql.com/doc/refman/5.1/de/date-and-time-functions.html) von MySQL?
BTW: Was genau steht in der Variablen $teltime?
MfG,
EKKi
--
sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
Hallo EKKI!
Was hältst Du von den Datums- und Zeitfunktionen von MySQL?
Ja da bin ich schon, find aber nicht was ich suche bzw. den Wald vor Bäumen nicht :( So?
"DELETE FROM users WHERE activ = 'N' && datum < DATE_ADD('".$deltime."', INTERVALL -1)"
BTW: Was genau steht in der Variablen $teltime?
Sry, Dippfehler ;)
Grüße, Matze
Mahlzeit Matze,
Ja da bin ich schon, find aber nicht was ich suche bzw. den Wald vor Bäumen nicht :( So?
"DELETE FROM users WHERE activ = 'N' && datum < DATE_ADD('".$deltime."', INTERVALL -1)"
Wieso überhaupt das Datum in PHP? Die Datenbank kann das doch mindestens genauso gut:
DELETE FROM users
WHERE activ = 'N' -- im Übrigen eine eher ungünstige Benennung
AND datum < DATE_ADD(CURDATE(), INTERVAL -1 DAY)
Ein "&&" innerhalb einer SQL-Abfrage sieht eher merkwürdig aus ...
MfG,
EKKi
Mahlzeit EKKI!
DELETE FROM users
WHERE activ = 'N' -- im Übrigen eine eher ungünstige Benennung
AND datum < DATE_ADD(CURDATE(), INTERVAL -1 DAY)
Arg, hatte ich es doch fast... Danke sehr! Aber wieso ungünstig benannt?
> Ein "&&" innerhalb einer SQL-Abfrage sieht eher merkwürdig aus ...
Ein AND tät es auch, aber ist doch beides gleichwertig?!
Oder meinst du nur ungewohnt für dich weil du das ausgeschriebene AND bevorzugst?
Grüße, Matze
Mahlzeit Matze,
Arg, hatte ich es doch fast... Danke sehr! Aber wieso ungünstig benannt?
Deutsch: aktiv
Englisch: active
Denglischer Kauderwelsch: activ
Du solltest Dich mit Dir selbst auf eine Sprache einigen. ;-)
Ein "&&" innerhalb einer SQL-Abfrage sieht eher merkwürdig aus ...
Ein AND tät es auch, aber ist doch beides gleichwertig?!
Oder meinst du nur ungewohnt für dich weil du das ausgeschriebene AND bevorzugst?
Wohl eher letzteres ... SQL ist halt in vielen Dingen "sprechender" als andere Programmiersprachen, da bin ich halt einfach ANDs gewöhnt. :-)
MfG,
EKKi
Hallo EKKI!
Denglischer Kauderwelsch: activ
Du solltest Dich mit Dir selbst auf eine Sprache einigen. ;-)
Hast recht und bei der Gelegenheit konsequenterweise auch gleich benutzer statt 'user', dass die Tabelle selbst 'user' heißt, kann ich verschmerzen ;)
Aber wenn ich eine Spalte deutsch, eine englisch, eine denglisch benenne komm ich später nur durcheinander.
Danke und Grüße,
Matze
Mahlzeit Matze,
Aber wenn ich eine Spalte deutsch, eine englisch, eine denglisch benenne komm ich später nur durcheinander.
Genau das ist das Dilemma. Aber wenn man's rechtzeitig bemerkt (oder aber eben gleich zu Beginn sorgfältig benennt), hat man die Probleme nachher nicht ...
MfG,
EKKi
Hallo EKKI!
Nochmal eine andere Frage.
Laut dem MySQL-Handbuch gibt eine DELETE-Anweisung die Anzahl der gelöschten Datensätze zurück.
Lösche ich in einer Funktion z.B. 2 Datensätze mit
function del_old(){
$query = mysql_query("DELETE from users...");
return $query;
}
sollte mir 2 ausgegeben werden. Es steht aber immer 1 da, also der Erfolgsfall vom Query. Erscheint mir auch logisch, aber wie krieg ich nun raus, wieviel Datensätze gelöscht wurden?
Danke und Grüße, Matze
Mahlzeit Matze,
Erscheint mir auch logisch, aber wie krieg ich nun raus, wieviel Datensätze gelöscht wurden?
Frag die Datenbank: mysql_affected_rows()
MfG,
EKKi
Hallo
DELETE FROM users
WHERE activ = 'N' -- im Übrigen eine eher ungünstige Benennung
AND datum < DATE_ADD(CURDATE(), INTERVAL -1 DAY)
kleine Mäkelei am Rande: [DATE_SUB()](http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_date-sub) fände ich lesbarer.
> Ein "&&" innerhalb einer SQL-Abfrage sieht eher merkwürdig aus ...
und ein || bewirkt [je nach DBMS was ganz anderes](/archiv/2008/3/t168438/#m1099017) als beabsichtigt.
Freundliche Grüße
Vinzenz
Es gibt einige spezielle Formate in MySQL für solche Zwecke aber entscheidend ist natürlich in welchem Format die Daten gespeichert sind.
Hallo Texter mit x!
Es gibt einige spezielle Formate in MySQL für solche Zwecke aber entscheidend ist natürlich in welchem Format die Daten gespeichert sind.
Richtig, deswegen hab ich auch schon im Titel auf die DATETIME-Spalte hingewiesen. Im Text dann nochmals. Wie das Format einer DATETIME-Spalte ist weißt du?
Grüße, Matze
Ich wollte darauf hinweisen, daß MySQL mit den speziellen Formaten auch speziell umgehen kann. Das wußte ich. Nicht wußte ich aus dem Stehgreif, wie das Statement hätte genau aussehen müssen.
Vielleicht hätte ich einfach mit "Ja." antworten sollen.