Konstantní počet řádku v tabulce
- mbrazdil
- Člen | 4
Zdravím,
mám v databázi tabulku, u které chci udržovat konstantní počet záznamů. Pokaždé, když se do tabulky zapíše záznam, mělo by se dalším SQL dotazem zkontrolovat, zda nepřesáhl počet záznamů v tabulce hodnotu 100. Klasickým SQL dotazem to máme tato:
DELETE FROM `log` WHERE `id` NOT IN (SELECT `id` FROM (SELECT `id` FROM `log` ORDER BY `id` DESC LIMIT 100) as `x`)
Jak by se tento SQL dotaz dal přepsat pomocí komponenty Nette Explorer? Případně to nějak zjednodušit? Děkuji.
- Pavel Kravčík
- Člen | 1196
Jedna zrůdnost. Co přidat unique
na id
, založit
ručně záznam 101
, resetovat increment a odchytávat výjimku
UniqueConstraintViolationException
.
- mbrazdil
- Člen | 4
Tak jsem to nakonec udělal takto:
$table1 = $this->explorer->table("log");
$table1->order("id DESC");
$table1->limit(100);
$table2 = $this->explorer->table("log");
$table2->where("NOT id", $table1);
$table2->delete();
Sice nevím, jak moc je to správně, ale vypadá to, že to funguje :)
- Kamil Valenta
- Člen | 822
A proč se po každém insertu nezavolá
DELETE FROM `log` ORDER BY id LIMIT 1
Samozřejmě to předpokládá těch 100 záznamů v tabulce. A když si to dáš do triggeru, máš vymalováno…