Jak w bazie danych skasować automatycznie rekordy starsze niż np. 30 dni, PHP Skrypty


[MySQL][PHP] Jak w bazie danych skasować automatycznie rekordy starsze niż np. 30 dni?

0x01 graphic

Chcesz aby rekordy w bazie danych (np. w serwisie ogłoszeniowym) były kasowane samoczynnie po upływie określonego czasu.

0x01 graphic

Jeżeli Twój serwis ma być bezobsługowy, musisz pomyśleć nad mechanizmem samoczynnego usuwania starych rekordów w bazach danych, jeżeli nie mają one znaczenia dla użytkownika. Dobrym przykładem może być baza z ogłoszeniami, które po 30 dniach są bezużyteczne.

Duża ilość rekordów w bazach danych to nie tylko problem z tym, aby informacje były aktualne. To także większe obciążenie dla serwera i niepotrzebna strata czasu na wyszukiwanie tych danych, które będą przydatne. Dlatego warto dodać prostą funkcję kasującą dane starsze niż określona ilość dni.

Zanim wykonamy prostą procedurę kasowania starych danych niezbędne będzie prawidłowe skonstruowanie samej tabeli. Musi ona zawierać pole z datą rekordu, aby można było określić czy wpis jest starszy niż 30 dni czy nie.

Może to być pole typu DATE (mamy do dyspozycji gotowy typ daty w formacie RRRR-MM-DD) lub nawet zwykłe pole tekstowe, gdzie możesz zdefiniować własny format daty. Grunt, aby data występowała w każdym rekordzie, więc takie pole powinno być zawsze wypełnione. Najlepiej zadeklarować je jako data DATE NOT NULL.

<?

$r=gmmktime()-60*60*24*30; // 30 dni do tyłu

$data30=gmdate("Y",$r)."-".gmdate("m",$r)."-".gmdate("d",$r);

$baza = mysql_connect("localhost", "user", "password");

if ($baza) {

$wynik = mysql_select_db("baza",$baza);

if ($wynik) {

mysql_query("DELETE FROM tabela WHERE data<'$data30'",$baza);

}

mysql_close($baza);

}

?>

Pierwsze co musimy zrobić to wyliczyć datę cofniętą o 30 dni. W tym celu można pobrać aktualny znacznik czasu i cofnąć go o określoną liczbę sekund. Liczba sekund dla jednej doby to 60*60*24, więc gdy pomnożymy wynik przez 30 mamy sekundy dla 30 dni wstecz (pamiętaj o odejmowaniu).

Na bazie cofniętego znacznika czasu tworzymy datę w formacie pola DATE z tabeli (RRRR-MM-DD) w zmiennej $data30. Następnie łączymy się z bazą i wykonujemy polecenie DELETE FROM, które kasuje w określonej tabeli rekordy starsze niż 30 dni.

Kasowane rekordy mają mieć pole data mniejsze niż data cofnięta o 30 dni. W ten sposób pozbywamy się starych rekordów w bazie.

Ponieważ nie ma zwykle potrzeby aby operacja kasowania zachodziła stale, można procedurę umieścić w jakimś mniej popularnym dziale lub na stronie, która nie jest zbyt często odwiedzana. W ten sposób przy dużej odwiedzalności serwisu, rekordy nie będą co chwilę kasowane, co przy sporej bazie chwilę trwa i obciąża serwer, jak każda operacja na bazie danych.

Powyższy sposób jest uniwersalny, ale wymaga użycia języka PHP. Możesz to samo uzyskać za pomocą funkcji MySQL w pytaniu:

DELETE FROM tabela WHERE data<DATE_SUB(NOW(),INTERVAL 30 DAY);

Usuwa ono wszystkie rekordy, które mają datę starszą niż 30 dni, a więc działa tak samo, jednak na poziomie MySQL. Funkcja DATE_SUB() odejmuje od chwili obecnej NOW() interwał 30 dni. Robi więc to samo, co wykonałem w PHP.

Możesz też skorzystać z takiej konstrukcji, jeżeli wolisz:

DELETE FROM tabela WHERE TO_DAYS(NOW())-TO_DAYS(data)>30;

Funkcja TO_DAYS() zwraca liczbę dni od początku kalendarza do chwili obecnej dla NOW() i do chwili pola daty dla data, jeżeli różnica tych dni wynosi więcej niż 30 dni, mamy wyselekcjonowane stare rekordy do usunięcia...

Jak widzisz, sposobów wyliczania okresu (u nas: starych rekordów) może być wiele...



Wyszukiwarka

Podobne podstrony:
Jak stworzyć na stronie kalendarzyk z dniami miesiąca na dowolny rok i miesiąc, PHP Skrypty
Jak sprawdzić czy dwa wyrazy są dla siebie anagramami (są permutacją, PHP Skrypty
jak stworzyc system www do edycji plikow tekstowych i stron w wybranyum katalogu, PHP Skrypty
Jak zamienić numer IP na domenę lub domenę na numer IP, PHP Skrypty
Jak zapisać i potem odczytać grafikę lub dowolny plik w bazie danych, PHP Skrypty
Jak sprawdzić czy w bazie danych istnieje aktualnie dodawana treść, PHP Skrypty
Jak za pomocą PHP pobrać nazwy tabel dostępne w wybranej bazie danych, PHP Skrypty
Jak zakładać i kasować tabele w bazie danych, PHP Skrypty
jak zapisac i potem odczytac grafikę lub dowolny plik w bazie danych, PHP Skrypty
jak zalozyc vaze danych dBase(dbf) i dodac do niej rekordy, PHP Skrypty
Algorytmy i struktury danych Wykład 3 i 4 Tablice, rekordy i zbiory
Jak uzyskać kolejny numer (id) ostatnio wstawionego rekordu, PHP Skrypty
JAK JEŹDZIĆ NA PRZEKŁADNI AUTOMATYCZNEJ, AuTO MoTO, Audi A6(1)
PHP MySQL i MVC Witryny oparte na bazie danych
Bazy danych - sciaga, Automatyka i Robotyka, Semestr 3, Bazy danych, BD, BD
Jak wstawić do bazy danych kod PHP i potem wykonać go w momencie pobrania z bazy, PHP Skrypty
Jak wysłać mailem w formacie HTML zawartość tabeli z bazy danych, PHP Skrypty

więcej podobnych podstron