Autor Zpráva
Matyáš
Profil
Dobrý den,
Potřeboval bych poradit s následujícím:
V databázi mám protokol událostí, ze kterého budu cronem, který spustí PHP odstraňovat záznamy starší, než týden.
Už jsem něco našel tady ( Datum "před týdnem"), ale nefunguje to.
Pro upřesnění, políčko s datem má tento formát: 2014-12-20 10:59:56, což je možná ten problém.
Děkuji.
Taps
Profil
Matyáš:
a jak máš poskládaný sql dotaz?
Matyáš
Profil
Takto:
$pred_tydnem = time()-60*60*24*7;
mysql_query("DELETE FROM protokol_udalosti WHERE datum <= '".$pred_tydnem."'");
Taps
Profil
Matyáš:
zkus
mysql_query("DELETE FROM protokol_udalosti WHERE DATE_FORMAT(datum,'%Y-%m-%d') <= '".$pred_tydnem."'");
Joker
Profil
Matyáš:
Pro upřesnění, políčko s datem má tento formát
Jestli má správný datový typ (DATETIME), formát není rozhodující.

Jinak, je nutné ty záznamy z databáze mazat? Nestačilo by při výběru prostě vybírat záznamy za poslední týden?
Matyáš
Profil
Taps:
mysql_query("DELETE FROM protokol_udalosti WHERE DATE_FORMAT(datum,'%Y-%m-%d') <= '".$pred_tydnem."'");
Bohužel, toto nefunguje.
Není to tím, že v proměnné $pred_tydnem je např. takovéto číslo?: 1418579344

Joker:
Jinak, je nutné ty záznamy z databáze mazat? Nestačilo by při výběru prostě vybírat záznamy za poslední týden?
Problém je v tom, že mám freehosting a jenom 30MB databáze. Časem by se to mohlo zaplnit. Chci to mít pokud možno bezúdržbové. Stejně by byl problém se zobrazením dat starších než týden. Jen by byl jiný SQL dotaz.
Taps
Profil
Matyáš:
oprava
mysql_query("DELETE FROM protokol_udalosti WHERE UNIX_TIMESTAMP(datum) <= '".$pred_tydnem."'");
Matyáš
Profil
Výborně! Toto funguje. Chápu to dobře, že UNIX_TIMESTAMP převádí datum na absolutní čas v sekundách?
Děkuji všem za rady!

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: