Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Usuwanie wpisów starszych niż 1 miesiąc
toomay
post 16.05.2007, 16:03:00
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 23.04.2007

Ostrzeżenie: (0%)
-----


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

Ten post edytował toomay 16.05.2007, 16:10:27
Go to the top of the page
+Quote Post
MiFlo
post 16.05.2007, 16:12:12
Post #2





Grupa: Zarejestrowani
Postów: 92
Pomógł: 4
Dołączył: 12.09.2006
Skąd: 127.0.0.1

Ostrzeżenie: (0%)
-----


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);
Go to the top of the page
+Quote Post
toomay
post 16.05.2007, 16:30:06
Post #3





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 23.04.2007

Ostrzeżenie: (0%)
-----


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ąć.
Go to the top of the page
+Quote Post
MiFlo
post 16.05.2007, 16:35:38
Post #4





Grupa: Zarejestrowani
Postów: 92
Pomógł: 4
Dołączył: 12.09.2006
Skąd: 127.0.0.1

Ostrzeżenie: (0%)
-----


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

Ten post edytował MiFlo 16.05.2007, 16:38:36
Go to the top of the page
+Quote Post
toomay
post 16.05.2007, 16:56:09
Post #5





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 23.04.2007

Ostrzeżenie: (0%)
-----


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() ?
Go to the top of the page
+Quote Post
starach
post 16.05.2007, 17:48:07
Post #6





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

Ostrzeżenie: (0%)
-----


datę powinieneś mieć jako pole typu datetime inaczej musisz wyciągać wszystkie wpisy z bazy i sprawdzać po koleji.
Go to the top of the page
+Quote Post
toomay
post 16.05.2007, 18:03:23
Post #7





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 23.04.2007

Ostrzeżenie: (0%)
-----


A jakieś konkrety ? jak powinny wyglądać dane umieszczane w datetime ? chodzi mi o format
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 9.07.2025 - 03:35