Autor Zpráva
lachim15
Profil
Zdravím, chtěl bych se zeptat, jakým příkazem / způsobem by se todle dalo provést?

Mám například 200 řádků v mysql, po vyvolání toho určitého příkazu, se smažou ostatní starší řádky kromě například nejnovějších 50.

díky za pomoc :)
juriad
Profil
DELETE FROM tabulka WHERE id IN (SELECT id FROM (SELECT id FROM tabulka ORDER BY cas LIMIT 51, 100000000) a)
http://stackoverflow.com/a/12382298
Smaž všechny záznamy jejichž id jsou 51. a dál seřazeno podle času.

Ty dvě úrovně jsou tam kvůli:
1. MySQL neumí u DELETu určit offset.
2. MySQL neumí LIMIT v podselektu.
lachim15
Profil
Upravil jsem si to na seřazení dle id a funguje to podle mích potřeb :) díky


Ještě mám k tomuto další otázku, chci to použít k logu (co kdo dělal na webu), kolik záznamů tak nechat a pak mazat, aby to nějak nepřetěžovalo a neměl ten log moc?
juriad
Profil
Ono obecně nemá moc smysl nechávat v databázi přesný počet záznamů. Obvykle chceš spíš smazat záznamy na základě podmínky na hodnotu, nikoli uspořádání. Například smaž řádky starší než týden (ať už jich je kolik chce, ať už jich zbyde kolik chce).
DELETE FROM tabulka WHERE cas < DATE_SUB(CURDATE(), INTERVAL 1 WEEK)



Databáze v pohodě zvládne miliony záznamů, stačí to? :-)
Můžeš ty záznamy nechat v databázi všechny a jen při výpisu si je seřadit podle id a omezit jejich výpis LIMITem třeba na 50.
lachim15
Profil
jj mám tam stránkování, jen mi šlo o to, aby tam toho nebylo zbytečně moc :) nakonec to časové mazání využiju, bude to lepší než to takhle mazat díky :)

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: