Kasowanie po określonym czasie np. 24h rekordu z bazy danych


(Sobladen) #1

Witam

Potrzebuje skryptu bo nie wiem jak to zrobić takiego żeby kasował odpowiednie rekordy z bazy danych po określonym czasie np. 24h...

Jak takie coś zrobić?


(IcyMat) #2

JA bym polecił zrobić w tabeli kolumnę czas. W niej zapisywałby się rekord, który by wyglądał następująco: godzina.minuta.dzien.mies.rok.

Następnie przy każdorazowym wywołaniu skryptu te wartości były by porównywane z obecną datą i gdy wszystko będzie równe, a dzień o jeden większy (troszkę zabawy będzie przy zmkanie miesięcy, ale wszystko jest do zrobienia :wink: ) to dany rekord by się usuwał. To chyba taki najprostszy sposób - może nie najbardziej optymalny, ale to tylko moja propozycja :wink:


(Zbyszekborkowski) #3

Można to zrobić przy pomocy Crona ("programik" okresowo uruchamiający skrypty), ale chyba nie każdy serwer go udostępnia - musisz sprawdzić. Sam Cron nie będzie wiedział, kiedy był dodany dany rekord, ale uruchomisz np. co godzinę swój skrypt. Czyli piszesz w PHP skrypt usuwający z bazy rekordy starsze niż Twoje 24 godziny, a w Cronie ustawiasz, aby skrypt ten był uruchamiany co jakiś czas.


(Sitemaster) #4

O żesz, lubicie sobie utrudniać czasem.

W tabeli dodatkowa kolumna np. czas typu TIMESTAMP, można też ustawić jej atrybut on update current_timestamp i wartość domyślną current_timestamp

A potem już tylko walnąć czasem zapytanie

DELETE FROM tabela WHERE czas < DATE_SUB(NOW(),INTERVAL 24 HOUR)

(Sobladen) #5

Dzięki..

Ja w php dopiero zaczynam więc napisanie tego w corn będzie dla mnie trochę za trudne..

W moim przypadku jest tak, ze ludzie dodają jakieś tam rekordy i ten rekord własnie chciałbym aby był dostępny tylko 24h i potem usuwany. Tych rekordów jest dość dużo dodawane około 500 na godzinę.. I czy taj zrobiłbym to w corn to nie bedzie muliło serwera i bazy zeby przeszukiwał linki?

I jak musiałbym zrobić warunek żeby sprawdzał sprawdził np. starsze rekordy niz 24h i je wypisał a później usunał?

Byłbym wdzięczny za pomoc.

// edit

Nie odswieżyłem tematu i nie zobaczyłem posta wyżej. Spróbuję to zrobić.

Dzięki


(IcyMat) #6

No cóż - nie pomyślałem o tym, że pola w MySQL mogą mieć różne typy :wink: być może dlatego, że z MySQL dopiero zaczynam :stuck_out_tongue_winking_eye:


(Sobladen) #7

mysql_query("DELETE FROM pliki WHERE czas < DATE_SUB(NOW(),INTERVAL 48 HOUR)") or die (mysql_error());

coś nie działa;/ wywala bład: Something is wrong in your syntax obok '' w linii 1

data jest w takim formacie: 2010-01-23 18:40:00