Dotaz pro UPDATE table s ORDER BY

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
newbie
Člen | 31
+
0
-

NDB. Jde zapsat (jinak než přes query) následující dotaz?

UPDATE `table`
SET `order`=`order` + 1
ORDER BY `order` DESC

Ať zkouším cokoliv, nikdy se mi ORDER do dotazu nevloží. Potřebuji to updatovat zezadu kvůli klíči na sloupci.

$this->getTable()->update(array('order' => new SqlLiteral('`order` + 1')))->order('order DESC');
duke
Člen | 650
+
0
-

Správně by bylo nejprve volat order() a až potom update(), nicméně zdá se, že v aktuálním Nette není pro ordered update podpora (order klauzule se v případě update ignoruje).

Pokud používáš MySQL můžeš nicméně pro dočasnou deaktivaci kontroly unikátnosti klíčů použít:

SET unique_checks=0;
-- tady zavoláš UPDATE bez ORDER BY
SET unique_checks=1;
newbie
Člen | 31
+
0
-

Bohužel nepomohlo. Stále řve „Integrity constraint violation: 1062 Duplicate entry“. Dělám to kvůli insertu a i když tomu insert dotazu přidám „ON DUPLICATE KEY UPDATE order = order +1;“ i s nastavením set unique_checks=0 databáze pořád hlásí stejnou chybu. MySQL i s vypnutím stále kontroluje duplicitu http://dev.mysql.com/…riables.html#… . No nevadí vyřešil jsem to neefektivním cyklem :/

duke
Člen | 650
+
0
-

Ještě můžeš zavolat ten SQL příkaz přímo bez použití SqlBuilderu:

$context->query("UPDATE `table` SET `order`=`order`+1 ORDER BY `order` DESC");