Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] usuwanie wpisów
Forum PHP.pl > Forum > Bazy danych > MySQL
adasiu
Witam,

Mam pytanko odnośnie usuwania wpisów. Mianowicie mam tabelę z kolumnami id tresc data_dod i jak zrobić żeby w niej zostawiać wpisy tylko z ostatnich 30 dni oraz nie więcej niż tysiąc wpisów według daty dodania. Szukałem na forum ale są rozwiązania jedynie odnośnie czasu a nie ma odnośnie ilości wpisów.

Z góry dzięki za pomoc.
osiris
wystarczy prosta procedura ktorej cialo wyglada tak:

  1. BEGIN DECLARE t INT;
  2. DECLARE current_date DATETIME;
  3.  
  4. SELECT NOW() INTO current_date; SELECT COUNT(*) INTO t FROM tabela WHERE data_dod < (current_date - INTERVAL 30 DAY);
  5.  
  6. IF (t > 1000) THEN
  7. DELETE FROM tabela ORDER BY data_dod LIMIT 1000 ;
  8. ELSE
  9. DELETE FROM tabela WHERE data_dod < (current_date - INTERVAL 30 DAY);
  10. END IF;
  11. END


uzylem tutaj zmiennej current_date do przechowania biezacej daty zamiast uzywac wszedzie funkcji NOW(), dlatego ze funkcja NOW jest funkcja niedeterministyczna i musialaby byc uruchamiana dla kazdego wiersza w tabeli, a tak jest raz - dzieki czemu zyskujemy troszke na szybkosci, szczegolnie w duzych tabelach

UPDATE:
na poczatku zle Cie zrozumialem, dlatego podana przeze mnie procedura usunie 1000 wpisow zamiast usunac x wpisow a zostawic tylko 1000. ale juz poprawienie jej nie powinno dla Ciebie stanowic zadnego problemu.
adasiu
oczywiście pomogło - plusik dla Ciebie
dziękuję smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.