Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

brisanje sa uslovom?

[es] :: MySQL :: brisanje sa uslovom?

[ Pregleda: 1774 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

apex
kikinda

Član broj: 31144
Poruke: 918
*.adsl-a-1.sezampro.yu.

Sajt: www.polovni-delovi.com


+1 Profil

icon brisanje sa uslovom?05.10.2008. u 14:37 - pre 189 meseci
Pozdrav svima, mucim se vec neko vreme oko ovoga pa rek'o ajde da pitam...

Imam tabelu logs i u njoj imam dve kolone LogID (autoincrement) i TimeAdd (vreme upisa loga)

ono sto zelim da uradim je da zadrzim samo zadnjih 200 logova a ovo ostalo da obrisem...

probao sam sa ovom naredbom ali naravno ne mogu da vrsim promene na tabeli koju koristim za upit

DELETE FROM logs WHERE logID != (SELECT logID FROM logs GROUP BY TimeAdd ASC LIMIT 200);

ako neko ima predloga?


[Ovu poruku je menjao apex dana 05.10.2008. u 17:28 GMT+1]
http://www.polovni-delovi.com - Najveći portal polovnih delova za sve tipove vozila
 
Odgovor na temu

Shinhan
PHP programmer
Subotica

Član broj: 12327
Poruke: 372
91.150.127.*

Jabber: shinhan@elitesecurity.org
ICQ: 400847988


+4 Profil

icon Re: brisanje sa uslovom?06.10.2008. u 08:19 - pre 189 meseci
El mora baš 200 ili može "da ostane najmanje 200"?
Može na više načina, naročito ako baš ne mora da bude iz jednog upita.

Ili da uzmeš datum 200. zapisa i obrišeš sve starije od toga:
SELECT TimeAdd FROM logs ORDER BY TimeAdd DESC LIMIT 200, 1;
DELETE FROM logs WHERE TimeAdd < "{datumpreuzetizgornjegupita}";

ili da prebrojiš koliko ima zapisa u logu i obrišeš ukupno-200
SELECT COUNT(*) FROM logs;
DELETE FROM logs ORDER BY TimeAdd LIMIT {ukupno-200}; // ne pokretati ovu komandu ako ukupno nije veće od 200!

Prvi slučaj mislim se sigurniji a sporiji.
Drugi slučaj može isprazniti celu tabelu ako se slučajno dva puta pokrene druga komanda ali je zato mnogo brži (naročitao ako je MyISAM tabela pa je count linija samo upit ka indexu).
E sad, ako inače nemaš puno rekorda u tabeli, brzina ti neče biti baš nešto važna.

Treće rešenje, ako ti je baš važno da nikad nemaš više od 200 je da pri svakom insertu radiš i brisanje najstarijeg reda.
"Common sense is not so common." - Voltaire
 
Odgovor na temu

apex
kikinda

Član broj: 31144
Poruke: 918
*.adsl-4.sezampro.yu.

Sajt: www.polovni-delovi.com


+1 Profil

icon Re: brisanje sa uslovom?06.10.2008. u 13:05 - pre 189 meseci
Citat:
Ili da uzmeš datum 200. zapisa i obrišeš sve starije od toga:
SELECT TimeAdd FROM logs ORDER BY TimeAdd DESC LIMIT 200, 1;
DELETE FROM logs WHERE TimeAdd < "{datumpreuzetizgornjegupita}";


ovako nesto mi bas odgovara, hvala na pomoci
http://www.polovni-delovi.com - Najveći portal polovnih delova za sve tipove vozila
 
Odgovor na temu

[es] :: MySQL :: brisanje sa uslovom?

[ Pregleda: 1774 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.