Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php/MySQL] Automatyczne usuwanie rekordu po 2h, Jak to zrobić?
wpatrykw
post 17.12.2006, 01:57:58
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 29.07.2006

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


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)?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 13)
kossa
post 17.12.2006, 02:20:37
Post #2





Grupa: Zarejestrowani
Postów: 1 165
Pomógł: 9
Dołączył: 9.04.2002
Skąd: Toruń

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


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


--------------------
Go to the top of the page
+Quote Post
wpatrykw
post 17.12.2006, 03:01:35
Post #3





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 29.07.2006

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


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 ?
Go to the top of the page
+Quote Post
WereWolf
post 17.12.2006, 07:28:53
Post #4





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 21.05.2005

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


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
Go to the top of the page
+Quote Post
wipo
post 17.12.2006, 07:47:51
Post #5





Grupa: Zarejestrowani
Postów: 856
Pomógł: 19
Dołączył: 30.08.2005
Skąd: 100lica

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


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.


--------------------
Go to the top of the page
+Quote Post
heaven
post 17.12.2006, 11:14:12
Post #6





Grupa: Nieautoryzowani
Postów: 92
Pomógł: 15
Dołączył: 21.10.2006

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


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
Go to the top of the page
+Quote Post
wpatrykw
post 17.12.2006, 14:53:24
Post #7





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 29.07.2006

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


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.
Go to the top of the page
+Quote Post
heaven
post 17.12.2006, 18:56:39
Post #8





Grupa: Nieautoryzowani
Postów: 92
Pomógł: 15
Dołączył: 21.10.2006

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


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


Ten post edytował heaven 17.12.2006, 18:57:14
Go to the top of the page
+Quote Post
wpatrykw
post 18.12.2006, 19:49:13
Post #9





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 29.07.2006

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


  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?

Ten post edytował wpatrykw 18.12.2006, 19:50:22
Go to the top of the page
+Quote Post
heaven
post 18.12.2006, 20:00:25
Post #10





Grupa: Nieautoryzowani
Postów: 92
Pomógł: 15
Dołączył: 21.10.2006

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


nie rob 2 tabel tylko jedna DATETIME (tam jest i czas i data) wtedy zadziala
Go to the top of the page
+Quote Post
wpatrykw
post 18.12.2006, 21:19:49
Post #11





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 29.07.2006

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


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.

Ten post edytował wpatrykw 18.12.2006, 21:34:03
Go to the top of the page
+Quote Post
heaven
post 18.12.2006, 22:16:47
Post #12





Grupa: Nieautoryzowani
Postów: 92
Pomógł: 15
Dołączył: 21.10.2006

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


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. )
Go to the top of the page
+Quote Post
wpatrykw
post 18.12.2006, 22:37:40
Post #13





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 29.07.2006

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


  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. )
Go to the top of the page
+Quote Post
heaven
post 19.12.2006, 08:27:18
Post #14





Grupa: Nieautoryzowani
Postów: 92
Pomógł: 15
Dołączył: 21.10.2006

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


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
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: 14.08.2025 - 04:52