Konstantní počet řádku v tabulce

mbrazdil
Člen | 4
+
0
-

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 | 1180
+
0
-

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
+
+1
-

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 | 752
+
0
-

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…