Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php/MySQL] Automatyczne usuwanie rekordu po 2h
Forum PHP.pl > Forum > PHP
wpatrykw
Witam,

Mam taki problem gdyż nie wiem jak zrobić/dopisać do mojego kodu czegoś co spowoduje że mój rekord będzie w bazie tylko 2godziny a później sam się usunie.

mysql_query("INSERT INTO moja_tabelka (punkty) VALUES ('$_POST[NowyPunkt]')")or die(mysql_error());

Teraz po wprowadzeniu punktu ze zmiennej i dodaniu do bazy powinien się usunąć ten punkt po 2h. Co mam zrobić żeby się usunuwały wpisy po 2h (same)?
kossa
Musisz napisać skrypt np. w php i na serwerze jest możliwość ustawienia aplikacji cron (szukaj na forum) która będzie co 2h odpalała Twój skrypt.

Ja mam konto na home.pl i tam mam do dyspozycji cron.

Łukasz
wpatrykw
Ja myślałem że przy definiowaniu dodawania wpisu można dodać opcje która zadeklaruje usunięcie/wygaśnięcie rekordu po danym czasie np. 2h. Da się tak ?
WereWolf
Cytat(wpatrykw @ 17.12.2006, 03:01:35 ) *
Ja myślałem że przy definiowaniu dodawania wpisu można dodać opcje która zadeklaruje usunięcie/wygaśnięcie rekordu po danym czasie np. 2h. Da się tak ?

z tego co wiem, nie ma takiej możliwości w MySQLu...

ostatecznie jeśli nie masz możliwości użycia cronu, można to obejść innym sposobem, ale trochę bardziej kłopotliwym i bardziej obciążającym serwer...

przy wpisie, który chcesz usuwać po danym czasie musiałbyś dodać pole z informacją kiedy został zapisany, a później przy każdym kolejnym dodawaniu takiego pola (np. przez innego użytkownika wchodzącego na stronę) sprawdzać czy są jakieś wpisy z przekroczonym czasem i jeśli tak, to je usuwać...
nie rozwiązuje to problemu całkowicie, bo wpisy nie będą usuwane dokładnie co 2 godziny, ale i tak nie zostaną użyte po tym czasie
wipo
Ale przecież może dodać pole datetime i potem przy kazdym wywolaniu usuwać rekordy, których datetime jest odpowiednio mniejszy (-2h) i już.
W sumie nie widzę potrzeby plątania w to crona jeżeli dane pobierane są z www.
heaven
nie musisz nawet usuwac przy kazdej probie odczytania. po prostu dodaj pole datetime i w select'cie dodaj warunek zeby zwral tylko nieprzestarzale pola. a usuwac przestarzale mozesz raz dziennie albo i rzadziej
wpatrykw
A napisał by mi ktoś jak mam to zrobić? bo z manuala nie kapuje zabardzo :/

żeby tylko zostawały pozdrowienia z ostatniej godziny a reszta się usuwała.
heaven
no to musisz dodac do tabeli kolumne np data_wstawienia i wstawiajac jakis wiersz robic to tak

  1. mysql_query("INSERT INTO moja_tabelka (punkty,data_wstawienia)
  2.  
  3. VALUES ('$_POST[NowyPunkt]',NOW())")OR die(mysql_error());


nastepnie pobierajac dane niejwiecej w ten sposob zawsze zapisujac ten warunek z czasem

  1. SELECT * FROM moja_tabelka WHERE data_wstawienia > NOW() - INTERVAL 2 HOUR


zwroci ci tylko wiersze ktore sa nie starsze niz 2 godziny

a raz dziennie mozesz wywolac funkcie (albo i rzadziej) ktora usunie przeterminowane wiersze.

  1. DELETE FROM moja_tabelka WHERE data_wstawienia < NOW() - INTERVAL 2 HOUR
wpatrykw
  1. $czyszczenie = "DELETE FROM pozdro_baza WHERE godzina < NOW() - INTERVAL 2 HOUR";
  2. $zapytaj = mysql_query($czyszczenie);


Wstawiłem taki kod. I mam problem taki że czyści mi wszystkoooo, nawet to co wstawiłem przed 5 minutami, a musi usuwać wszystko co jest starsze niż 2 godziny.

Tabela z czasem (forma typu 18:15:03 G:i:s): godzina
Tabela z datą (gorma typu 2006-12-18): data

Jak mam to dopicować żeby poprawnie działało?
heaven
nie rob 2 tabel tylko jedna DATETIME (tam jest i czas i data) wtedy zadziala
wpatrykw
A napisz mi jeszcze czy to ma być zwykła VARCHAR i jaka strukture ma mieć wpis jak on ma wyglądać.

czy ma on mieć forme 2006-12-18 21:19:03 czy jakąś inną. np czy mają być pauzy czy mają być dwukropki czy odstępy czy jak.
heaven
Przeciez pisze ze ma to by DATETIME

podaj zapytanie ktorym tworzysz tabelke CREATE TABLE ..... to ci dopisze jesli to dla ciebie takie trudne

Po prostu dopisz pole

  1. CREATE TABLE moja_tablica
  2.  
  3. (
  4.  
  5. ......
  6.  
  7. data_wstawienia DATETIME,
  8.  
  9. ......
  10.  
  11. )
wpatrykw
  1. CREATE TABLE `pozdro_baza` (
  2. `id` int(6) NOT NULL AUTO_INCREMENT,
  3. `od` varchar(20) DEFAULT NULL,
  4. `dla` varchar(100) DEFAULT NULL,
  5. `tresc` varchar(200) DEFAULT NULL,
  6. `przeczytane` char(3) DEFAULT NULL,
  7. `data` varchar(100) DEFAULT NULL,
  8. `godzina` varchar(100) DEFAULT NULL,
  9. PRIMARY KEY (`id`)
  10. )
heaven
jelsli nie jest ci potrzebne pole data i godzina to usun i zapisz cos takiego

  1. CREATE TABLE `pozdro_baza` (
  2. `id` int(6) NOT NULL AUTO_INCREMENT,
  3. `od` varchar(20) DEFAULT NULL,
  4. `dla` varchar(100) DEFAULT NULL,
  5. `tresc` varchar(200) DEFAULT NULL,
  6. `przeczytane` char(3) DEFAULT NULL,
  7. [b]`data_wstawienia` DATETIME NOT NULL,
  8. [/b]PRIMARY KEY (`id`)
  9. )


a jesli data i czas tez ci sa potrzebne to poprostu dodaj jeszcze jedna kolumne o tak

  1. CREATE TABLE `pozdro_baza` (
  2. `id` int(6) NOT NULL AUTO_INCREMENT,
  3. `od` varchar(20) DEFAULT NULL,
  4. `dla` varchar(100) DEFAULT NULL,
  5. `tresc` varchar(200) DEFAULT NULL,
  6. `przeczytane` char(3) DEFAULT NULL,
  7. `data` varchar(100) DEFAULT NULL,
  8. `godzina` varchar(100) DEFAULT NULL,
  9. [b]`data_wstawienia` DATETIME NOT NULL,
  10. [/b]PRIMARY KEY (`id`)
  11. )


a pozatym czemu date i godzine trzymasz w varchar'ach? od tego sa DATE, TIME i DATETIME
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.