Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Usuwanie wpisów starszych niż 1 miesiąc
Forum PHP.pl > Forum > PHP
toomay
Witam, zastanawiam się jak zrobić skrypt dzięki któremu mógłbym usuwać wpisy z bazy danych starsze niż jeden miesiąc.

Mam tabelę mysql przykładowo z newsami w której jednym z wpisów jest data.
Myślałem żeby wyciągnąć datę dodania newsa, następnie odjąć ją od daty aktualnej i dać warunek aby usunąć wszystkie wpisy spełniające ten warunek.

przykład:
  1. <?php
  2. if($_GET['clear']==&& $_GET['confirm']==1)
  3. {
  4. $db_connect=mysql_connect($host,$login,$passw)or die("Błąd podczas pr&oacute;by połączenia z bazą danych !");
  5. @mysql_select_db($db, $db_connect)or die("Błąd podczas pr&oacute;by wyboru bazy danych !");
  6. $sql='SELECT * FROM messages';
  7. $result=mysql_query($sql, $db_connect);
  8. while($row=mysql_fetch_array($result))
  9. {
  10. $date=$row['date'];
  11. $_date=date('d.m.Y');
  12. $starsze=($date-$_date);
  13. echo $starsze;
  14. //$sql2='DELETE FROM messages WHERE date='.$starsze>30.'';
  15. //$result2=mysql_query($sql2, $db_connect);
  16. }
  17. }
  18. ?>


Niestety ten sposób wyświetla mi wynik w stylu: 0000-0.039999999999999.
Poza tym wydaje mi się że:

  1. <?php
  2. $sql2='DELETE FROM messages WHERE date='.$starsze>30.'';
  3. ?>


Nie jest właściwe (jestem tego prawie pewien).
Zastanawiam się też czy konieczne jest użycie pętli.

Proszę o wszelkie wskazówki jak można to osiągnąć, z góry dzięki.

pozdrawiam
toomay
MiFlo
po pierwsze proponuje korzystać z time()" title="Zobacz w manualu PHP" target="_manual a nie z date()" title="Zobacz w manualu PHP" target="_manual
Dlaczego ?
time() wyrzuca ci ilość sekund upłyniętych od 1970-01-01 00:00:00 a więc całkiem wygodne operować na sekundach a w razie potrzeby można banalnie to do daty wyeksportować:
date('format',tutaj ilość sekund);
toomay
Dzięki za odpowiedź. Ale ja sekund w tym przypadku nie potrzebuje smile.gif Dokładność co do sekundy nie jest konieczna. Po prostu chcę mieć możliwość usunięcia newsów starszych niż jakaś wartość, podałem za przykład jeden miesiąc czyli 30 dni, i zastanawia mnie w jaki sposób można to osiągnąć.
MiFlo
wierz mi że łatwiej jest na sekundach popatrz: ( zapytanie do bazy usuwające rekordy starsze niż 30dni )
  1. <?php
  2. $time = time() - (3600 * 24 * 30);
  3. mysql_query("DELETE FROM tabela WHERE time<".$time.";");
  4. ?>

i usuwa smile.gif
a przy dacie to jest straszne kombinowanie dlaczego ?
bo powiedz mi masz załóżmy 1 stycznia 2007 i jak chcesz wygenerować date o 30 dni wcześniej ? no cięzko by było... ale jest rozwionazanie
wcześniej była zmienna $time ( w powyszym skrypcie )
teraz mozesz uzyc
  1. <?php
  2. $time = date('formatdaty',$time);
  3. ?>

i gotowe
toomay
Trochę się pogubiłem, czyli muszę stworzyć w tabeli mysql dodatkowy wiersz z sekundami tak ? Wytłumacz to dokładniej bo dzisiaj jestem wyjątkowo niepodatny na wiedzę rolleyes.gif .
Aktualnie moja tabela w mysql wygląda tak:

  1. CREATE TABLE news (
  2. id int(11) NOT NULL AUTO_INCREMENT,
  3. date char(50),
  4. hour char(50),
  5. title char(255),
  6. autor char(50),
  7. news_short text,
  8. news_full text,
  9. UNIQUE id (id),
  10. PRIMARY KEY (id)
  11. );


I o ile dobrze myślę, to wg. Twojego pomysłu muszę wstawić pod 'date' dodatkowo 'time' ?
ps. Jaki jest format time bo chyba nie po prostu time() ?
starach
datę powinieneś mieć jako pole typu datetime inaczej musisz wyciągać wszystkie wpisy z bazy i sprawdzać po koleji.
toomay
A jakieś konkrety ? jak powinny wyglądać dane umieszczane w datetime ? chodzi mi o format
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.