Na koji sve način mogu da se izbrišu polja u nekoj tabeli (mysql) koja su recimo starija od 2 dana?
Automatsko brisanje zapisa nakon određenog vremena
Zaključano
Zakačeno
zavisi kako si (i da li si) pamtio vreme unosa rekorda u bazu.
elem, najlaksi, (i od vecine php-ovaca najomiljeniji) nacin za cuvanje vremena u mysql-u je preko obicnog int polja, i preko time() php funkcije.
znaci, ako si pri unosenju unosio sa
onda i brises tako sto od trenutnog vremena oduzmesh 60*60*24*2 sekundi (dva dana).
e, ako koristish mysql timestamp, onda je sintaxa drugacija, ali to retko koristim, pa ne znam napamet...
Go! X: Izmenjeno imenovanje varijabli, $time != $vreme u prvom upitu ;)
[Ovu poruku je menjao Go! X dana 19.01.2003. u 11:49 GMT]
elem, najlaksi, (i od vecine php-ovaca najomiljeniji) nacin za cuvanje vremena u mysql-u je preko obicnog int polja, i preko time() php funkcije.
znaci, ako si pri unosenju unosio sa
Code:
$vreme=time();
mysql_query("INSERT INTO tabela SET kolona='$kolona', vreme='$vreme'");
$vreme=time();
mysql_query("INSERT INTO tabela SET kolona='$kolona', vreme='$vreme'");
onda i brises tako sto od trenutnog vremena oduzmesh 60*60*24*2 sekundi (dva dana).
Code:
$vreme=time()-2*24*60*60;
mysql_query("DELETE tabela WHERE vreme<'$vreme'");
$vreme=time()-2*24*60*60;
mysql_query("DELETE tabela WHERE vreme<'$vreme'");
e, ako koristish mysql timestamp, onda je sintaxa drugacija, ali to retko koristim, pa ne znam napamet...
Go! X: Izmenjeno imenovanje varijabli, $time != $vreme u prvom upitu ;)
[Ovu poruku je menjao Go! X dana 19.01.2003. u 11:49 GMT]
Mene zanima kako je moguće staviti da se pokrene skripta nakon određenog vremena?
Kolko ja poznajem PHP,nepostoji funcija koja to radi,znači samo sa nekim drugim jezikom je moguće uraditi tako nešto?
Kolko ja poznajem PHP,nepostoji funcija koja to radi,znači samo sa nekim drugim jezikom je moguće uraditi tako nešto?
stripi, ovo je totalno nevezano za temu, ali ajde oprosticu ti (josh) ovaj put ;)
elem, da, to ne moze iz php-a (niti moze iz bilo kog jezika, ako skripta / program ne radi stalno..)
to se radi najcesce preko cron-a ili crontab komande u linuxu/unixu. ako imash gde, kucaj crontab --h ili man cron...
ako vec nemash linux shell, postoji jedno slicno resenje.
imash drugara koji ima linux/unix makinu koja je 24/7 na netu, i trazis od njega da stavi u svoj cron komandu tipa wget http://www.tvojsajt.com/putanja/do/skripte.php (da se izvrsava na svakih 15 min recimo)
tvoja skripta treba da proveri koje je vreme, da li treba da se izvrsi (sta god da treba da radi) i ako treba, odradi to. vazno je da ne ispises nista (ili bar ne mnogo) da ne bi pravio veliki protok drugaru...
treca solucija je ako imash relativno posecen sajt. (relativno znaci recimo 500+ pageView-a dnevno).
onda stavish tabelu u kojoj ce da cuvash "taskove", sa vremenima kada treba da se izvrse, i poljem da li su vec izvrseni. pri svakom pageHit-u, proverish da li je neki task na redu da se izvrsi, i ako jeste, izvrsish ga i setujesh u bazi da je izvrsen...
elem, da, to ne moze iz php-a (niti moze iz bilo kog jezika, ako skripta / program ne radi stalno..)
to se radi najcesce preko cron-a ili crontab komande u linuxu/unixu. ako imash gde, kucaj crontab --h ili man cron...
ako vec nemash linux shell, postoji jedno slicno resenje.
imash drugara koji ima linux/unix makinu koja je 24/7 na netu, i trazis od njega da stavi u svoj cron komandu tipa wget http://www.tvojsajt.com/putanja/do/skripte.php (da se izvrsava na svakih 15 min recimo)
tvoja skripta treba da proveri koje je vreme, da li treba da se izvrsi (sta god da treba da radi) i ako treba, odradi to. vazno je da ne ispises nista (ili bar ne mnogo) da ne bi pravio veliki protok drugaru...
treca solucija je ako imash relativno posecen sajt. (relativno znaci recimo 500+ pageView-a dnevno).
onda stavish tabelu u kojoj ce da cuvash "taskove", sa vremenima kada treba da se izvrse, i poljem da li su vec izvrseni. pri svakom pageHit-u, proverish da li je neki task na redu da se izvrsi, i ako jeste, izvrsish ga i setujesh u bazi da je izvrsen...
Citat:
zombie / DDG:
stripi, ovo je totalno nevezano za temu, ali ajde oprosticu ti (josh) ovaj put ;)
stripi, ovo je totalno nevezano za temu, ali ajde oprosticu ti (josh) ovaj put ;)
Hmmm zar ima jos neki stripi ovdje ili si mislio na mene podsvjesno? :)
Btw. dobro si odgovorio gore iznad.
Potpis
Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA
Da... Tako i nešto sam i prepostavio... Hvala :Đ
Citat:
StRiPy:
Hmmm zar ima jos neki stripi ovdje ili si mislio na mene podsvjesno? :)
Btw. dobro si odgovorio gore iznad.
Citat:
zombie / DDG:
stripi, ovo je totalno nevezano za temu, ali ajde oprosticu ti (josh) ovaj put ;)
stripi, ovo je totalno nevezano za temu, ali ajde oprosticu ti (josh) ovaj put ;)
Hmmm zar ima jos neki stripi ovdje ili si mislio na mene podsvjesno? :)
Btw. dobro si odgovorio gore iznad.
:D lol
sorry. mora da sam citao neki tvoj post prethodno...
znaci, CONFOQ: ovo je totalno nevezano za temu, ali ajde oprosticu ti (josh) ovaj put ;)
josh jednom, :D, lol
Ljudi hvala...
Citat:
CONFIQ:
Mene zanima kako je moguće staviti da se pokrene skripta nakon određenog vremena?
Kolko ja poznajem PHP,nepostoji funcija koja to radi,znači samo sa nekim drugim jezikom je moguće uraditi tako nešto?
Mene zanima kako je moguće staviti da se pokrene skripta nakon određenog vremena?
Kolko ja poznajem PHP,nepostoji funcija koja to radi,znači samo sa nekim drugim jezikom je moguće uraditi tako nešto?
Posto su ti vec odgovorili za *nix sisteme, ako radis pod win2000 (odakle si pisao poruku), onda idi u dos prompt i pogledaj komandu "at" (bez navodnika). Radi nesto slicno kao cron ;) (at /? za pomoc)
E sad, ako nece "direktno" da ti pozove php fajl kako treba, a ti lepo to stavis u .bat fajl u kome imas liniju (ako nemas php u path-u):
\putanja_do_php\php -q skript.php
ili samo
php -q skript.php
i pomocu at-a odredis kad da se pokrece...
za kompletne opcije startovanja php-a kucaj php -h
Potpis
Kad sve ostalo zakaže, pročitaj uputstvo...
izvinjavam se sto podizem temu iz mrtvih ali imam problem a treba mi ista stvar....
u mysql imam polje koje je type:TIME
scripta treba da brise sve upise starije od X sati (ajd neka bude 1H)
uradi on query,ime table sve je to ispravno kad uradim echo dobijem vrednosti iz baze...e sad ja mislim da sam pogresio oko $server_time tj da ne mogu od njega oduzeti 3600sec..
Jel na dobro ciljam? i kako da resim to ...
u bazi mi potrebno samo vreme....datum mi nije potreban...jer kazem brisace se svakog sata...
u mysql imam polje koje je type:TIME
scripta treba da brise sve upise starije od X sati (ajd neka bude 1H)
Code:
$server_time = date ('H:i:s');
$sql = "SELECT polje FROM tabela";
$rs = $conn->execute($sql);
$timelimit = $rs->fields['polje'];
$time = $server_time - $timelimit*60*60;
$sql = "DELETE vvl_log WHERE exp_time <'" .mysql_real_escape_string($time). "'";
$conn->execute($sql);
$server_time = date ('H:i:s');
$sql = "SELECT polje FROM tabela";
$rs = $conn->execute($sql);
$timelimit = $rs->fields['polje'];
$time = $server_time - $timelimit*60*60;
$sql = "DELETE vvl_log WHERE exp_time <'" .mysql_real_escape_string($time). "'";
$conn->execute($sql);
uradi on query,ime table sve je to ispravno kad uradim echo dobijem vrednosti iz baze...e sad ja mislim da sam pogresio oko $server_time tj da ne mogu od njega oduzeti 3600sec..
Jel na dobro ciljam? i kako da resim to ...
u bazi mi potrebno samo vreme....datum mi nije potreban...jer kazem brisace se svakog sata...
Potpis
Say NO to pop culture!!!
Crno je uvek u modi....
Crno je uvek u modi....
Za $server_time probaj ovako:
Code:
$server_time = time();
$server_time = time();
hm...ne radi ovo ...
sve sam zivo probao....
sve sam zivo probao....
Potpis
Say NO to pop culture!!!
Crno je uvek u modi....
Crno je uvek u modi....
Probaj onda i da umesto $timelimit*60*60 napišeš strtotime($timelimit).
nikola hvala na trudi ali ni to ne radi :)
Potpis
Say NO to pop culture!!!
Crno je uvek u modi....
Crno je uvek u modi....
Ako si pratio uputstva, a i dalje ti ne radi, verovatno upit gde brišeš zapis nije dobar.
Ovo kažem jer pretpostavljam da ti je polje exp_time tipa TIME a ti pokušavaš da ga uporediš sa integerom.
Uradi jedan echo upita pa ga postuj ovde, verovatno pokušavaš da porediš nešto tipa WHERE '03:26:32' < 1240579592 ili tako nešto.
Ovo kažem jer pretpostavljam da ti je polje exp_time tipa TIME a ti pokušavaš da ga uporediš sa integerom.
Uradi jedan echo upita pa ga postuj ovde, verovatno pokušavaš da porediš nešto tipa WHERE '03:26:32' < 1240579592 ili tako nešto.
Ajde probaj onda da pored ova dva koraka koja sam ti predložio uradiš i ovo:
Tu su ti sad sve tri izmene. Taj prvi argument f-ji date bi trebao da bude onaj format u kome čuvaš to vreme u bazi...
A i sad mi pade napamet, ako je tebi cilj da brišeš neke zapise starije od određenog vremena, ona to sve može da se odradi u tom jednom upitu, npr.:
To bi trebalo da obriše sve zapise starije od 10 sati. Mora da se piše kao 100000, pošto je f-ja CURTIME(), kada se koristi u proračunima, u formatu HHMMSS.uuuuuu, što znači ako je sada npr. 22:00:00, CURTIME() - 100000 će dati 120000.000000.
Code:
$server_time = time();
//...
$time = $server_time - strtotime($timelimit);
$time = date('H:i:s', $time);
//...
$server_time = time();
//...
$time = $server_time - strtotime($timelimit);
$time = date('H:i:s', $time);
//...
Tu su ti sad sve tri izmene. Taj prvi argument f-ji date bi trebao da bude onaj format u kome čuvaš to vreme u bazi...
A i sad mi pade napamet, ako je tebi cilj da brišeš neke zapise starije od određenog vremena, ona to sve može da se odradi u tom jednom upitu, npr.:
Code:
DELETE FROM vvl_log WHERE exp_time < CURTIME() - 100000
DELETE FROM vvl_log WHERE exp_time < CURTIME() - 100000
To bi trebalo da obriše sve zapise starije od 10 sati. Mora da se piše kao 100000, pošto je f-ja CURTIME(), kada se koristi u proračunima, u formatu HHMMSS.uuuuuu, što znači ako je sada npr. 22:00:00, CURTIME() - 100000 će dati 120000.000000.
Citat:
Tudfa:Ovo kažem jer pretpostavljam da ti je polje exp_time tipa TIME a ti pokušavaš da ga uporediš sa integerom.
nema sta da pretpostavljas ja sam to napomenuo u postu ;)
Citat:
Uradi jedan echo upita pa ga postuj ovde, verovatno pokušavaš da porediš nešto tipa WHERE '03:26:32' < 1240579592 ili tako nešto.
tacno
DELETE vvl_log WHERE exp_time <'1240606308'
Citat:
mislio si $timelimit ?
Citat:
Code:
DELETE FROM vvl_log WHERE exp_time < CURTIME() - 100000
DELETE FROM vvl_log WHERE exp_time < CURTIME() - 100000
ok je to al ne mogu da koristim....$timelimit ce mi biti promenljiv tj iz AdminCP-a ce se moci menjati vremenski period (polje za upisivanje i user stavi 1-2-3-XX sati )
Potpis
Say NO to pop culture!!!
Crno je uvek u modi....
Crno je uvek u modi....
Citat:
bugsu:nema sta da pretpostavljas ja sam to napomenuo u postu ;)
Pa ako je tako onda moraš da uporedjuješ vreme u pravom formatu.
To ćeš postići tako što ćeš promenljivu $time koju koristiš u DELETE upitu dovesti u isti format u kojem su podaci sačuvani u bazi.
Samo iskoristiš ovo što ti je već predloženo:
[quote]Nikola Poša:
Code:
//...
$time = date('H:i:s', $time);
//...
//...
$time = date('H:i:s', $time);
//...
Citat:
bugsu: mislio si $timelimit ?
Ne, mislio sam baš na $time, a objasnio ti je Vlaidmir zašto...
Citat:
bugsu: ok je to al ne mogu da koristim....$timelimit ce mi biti promenljiv tj iz AdminCP-a ce se moci menjati vremenski period (polje za upisivanje i user stavi 1-2-3-XX sati )
Pa dobro, nisam ja mislio da onih 100000 bude fiksno, ti to što izabereš u admin panel-u, možeš da prebaciš u ovaj format "čitljiv" za CURDATE(). Npr. ako izabere 1, ti ćeš to prebaciti u 010000, 2 => 020000, itd.
sad vec pocinjem da razmisljam jer sam ja stvarno glup or what....
echo
sad dobijem sta mi treba al ne oduzima X od trenutnog vremena.....
Code:
$server_time = time();
$time = time() - strtotime($timelimit*60*60);
$time = date('H:i:s', $time);
$sql = "DELETE FROM vvl_log WHERE exp_time <$time";
$server_time = time();
$time = time() - strtotime($timelimit*60*60);
$time = date('H:i:s', $time);
$sql = "DELETE FROM vvl_log WHERE exp_time <$time";
echo
Code:
DELETE FROM vvl_log WHERE exp_time <12:04:00
server time is 12:04:00
DELETE FROM vvl_log WHERE exp_time <12:04:00
server time is 12:04:00
sad dobijem sta mi treba al ne oduzima X od trenutnog vremena.....
Potpis
Say NO to pop culture!!!
Crno je uvek u modi....
Crno je uvek u modi....