[ goran33 @ 18.01.2003. 23:29 ] @
Na koji sve način mogu da se izbrišu polja u nekoj tabeli (mysql) koja su recimo starija od 2 dana? |
[ goran33 @ 18.01.2003. 23:29 ] @
[ -zombie- @ 19.01.2003. 02:03 ] @
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 Code: $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'"); 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] [ CONFIQ @ 19.01.2003. 02:11 ] @
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? [ -zombie- @ 19.01.2003. 02:34 ] @
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... [ Dejan Topalovic @ 19.01.2003. 11:32 ] @
Citat: zombie / DDG: 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. [ CONFIQ @ 19.01.2003. 15:41 ] @
Da... Tako i nešto sam i prepostavio... Hvala :Đ
[ -zombie- @ 19.01.2003. 18:13 ] @
Citat: StRiPy: Citat: zombie / DDG: 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 [ goran33 @ 19.01.2003. 18:33 ] @
Ljudi hvala...
[ Jbyn4e @ 20.01.2003. 13:43 ] @
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? 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 [ bugsu @ 24.04.2009. 15:02 ] @
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) 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); 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... [ Nikola Poša @ 24.04.2009. 15:13 ] @
Za $server_time probaj ovako:
Code: $server_time = time(); [ bugsu @ 24.04.2009. 15:42 ] @
hm...ne radi ovo ...
sve sam zivo probao.... [ Nikola Poša @ 24.04.2009. 18:31 ] @
Probaj onda i da umesto $timelimit*60*60 napišeš strtotime($timelimit).
[ bugsu @ 24.04.2009. 19:23 ] @
nikola hvala na trudi ali ni to ne radi :)
[ Tudfa @ 24.04.2009. 20:44 ] @
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. [ Nikola Poša @ 24.04.2009. 21:07 ] @
Ajde probaj onda da pored ova dva koraka koja sam ti predložio uradiš i ovo:
Code: $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 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. [ bugsu @ 24.04.2009. 22:00 ] @
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 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 ) [ Tudfa @ 24.04.2009. 22:35 ] @
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); //... [ Nikola Poša @ 25.04.2009. 09:33 ] @
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. [ bugsu @ 25.04.2009. 18:24 ] @
sad vec pocinjem da razmisljam jer sam ja stvarno glup or what....
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"; echo Code: 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..... [ Nikola Poša @ 25.04.2009. 20:12 ] @
Ovaj red ti je problematičan:
Citat: Ne treba ti "60*60", to umesto tebe radi f-ja strtotime(). Ona pretvara datum/vreme u sekunde. A i druga, manje bitna stvar je da si u prethodnom redu izračunao vreme sa time() i smestio ga u jednu promenljivu ($server_time), a onda opet bespotrebno pozivaš f-ju time(), al' to i nije tol'ko bitno... btw Jel to znači da si odustao od onog rešenja sa MySQL-om? ![]() [ bugsu @ 25.04.2009. 22:33 ] @
Citat: Nikola Poša: Ovaj red ti je problematičan: Ne treba ti "60*60", to umesto tebe radi f-ja strtotime(). Ona pretvara datum/vreme u sekunde. A i druga, manje bitna stvar je da si u prethodnom redu izračunao vreme sa time() i smestio ga u jednu promenljivu ($server_time), a onda opet bespotrebno pozivaš f-ju time(), al' to i nije tol'ko bitno... btw Jel to znači da si odustao od onog rešenja sa MySQL-om? :) dzabe stavio ja 60*60 il ne...isto mi se vata :/ isti rezulta cek cek....sad me ovo buni (malko sam dosadan) $time = time() - strtotime($timelimit); znaci on uzme trenutno vreme (serversko naravno) i oduzme $timelimit koji uzima iz baze i prebacuje ga u sekunde.... meni u bazi stoji 1....otkud ce on znaci dal je 1min,1sat,1 dan?ja mislim da je tu problem u vezi $server_time...nije to bas ni dzabe jer se ta promenjljiva koristi jos u tom php fajlu :) ja sam vama dao samo ono sto me muci :D... od mySQL resenja nisam odustao...tj...sa tim bi morao imati padajuci menu sa vec predefinisanim opcijama,a to meni ne bi odgovaralo / ili / da ne bude vec predefinisane opcije ali na malo duzi nacin bi to islo(korisnik bi onda morao kucati za 1H vrednost 01 etc..) a meni treba ovo sto lakse da je i meni (zbog odrzavanja) + korisniku koji ce to koristiti ...nekako ovo treba do 1vog da uglavim u sajt kako znam i umem...tj sve sam uglavio samo mi ovo ostalo :/ ako ne uspem sa php-om prelazim na mySQL nacin izracunavanja nema mi druge... [ Nikola Poša @ 26.04.2009. 10:16 ] @
Citat: bugsu: meni u bazi stoji 1....otkud ce on znaci dal je 1min,1sat,1 dan?ja mislim da je tu problem Pa stvarno ne znam kako si to onda organizovao u bazi... Jel to polje samo jedna cifra? I šta ono na kraju predstavlja? Sate, minute, dane? Kako si ti onda mislio da kad to polje pomnožiš sa 60*60, dobiješ vreme ili šta već... Ja sam mislio da je to polje u bazi u formatu vremena (H:i:s). I ta promenljiva $server_time je bespotrebna, jer nju možeš da dobiješ i pri kreiranju upita, pomoću CURDATE(). Tako da, tebi još samo ostaje da vidiš kako ćeš od tog tvog polja iz baze ($timelimit) da dobiješ format koji može da se oduzme od CURDATE(). Ako ti kažeš da su to samo int vrednosti 1, 2, itd., i da predstavljaju sate, onda bi za konverziju trebao da uradiš ovo: Code: if ((int)$timelimit > 9) { $timelimit .= '0000'; } else { $timelimit = '0' . $timelimit . '0000'; } A onda bi upit izgledao ovako: Code: $upit = "DELETE FROM vvl_log WHERE exp_time < CURTIME() - '$timelimit'"; I evo sad ceo taj kod: Code: $sql = "SELECT polje FROM tabela"; $rs = $conn->execute($sql); $timelimit = $rs->fields['polje']; if ((int)$timelimit > 9) { $timelimit .= '0000'; } else { $timelimit = '0' . $timelimit . '0000'; } $sql = "DELETE FROM vvl_log WHERE exp_time < CURTIME() - '$timelimit'"; $conn->execute($sql); [ bugsu @ 26.04.2009. 10:35 ] @
pa cekaj....
ako idem $timelimit*60*60 a $timelimit mi 1 ..znaci 3600 dobijem rezultat... $time - 3600 ne bi trebao da dobijem 1H manje? $server_time jeste bespotrebna ako koristim CURDATE()....ali ja se nisam setio da pogledam dal ima u SQL ta funkcija.... [ Nikola Poša @ 26.04.2009. 11:42 ] @
E pa u tom slučaju je to ok, opet kažem, nisam znao da ti u bazi držiš samo 1, 2, 3, itd. A pošto se te cifre odnose na sate, onda moraš da ideš sa 60*60, pa će se ona tvoja promenljiva $time izračunavati ovako:
Code: $time = time() - $timelimit * 3600; $time = date('H:i:s', $time); I postoji CURDATE(), naravno... [ bugsu @ 26.04.2009. 11:46 ] @
uradio sam sa CURDATE() a vidim i ti si nesto zapeo za to :P (radi sad ok)
a sad vidim da ja nisam napomenuo sta drzim u bazi za $timelimit :/ moja greska... ok sad znam za ubuduce.... hvala na trudu ;) [ Nikola Poša @ 26.04.2009. 12:02 ] @
Pa nisam zapeo, nego je uvek bolje da takve neke "proračune" odradiš odma' u upitu... :)
Npr. bolje je ovako: Code: $sql = "SELECT SUBSTR(foo, 3, 7) FROM bar"; //... echo $r['foo']; ... nego ovako: Code: $sql = "SELECT foo FROM bar"; //... $foo = substr($r['foo'], 3, 7); echo $foo; Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|