tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

Omlouváme se, provoz fóra byl ukončen

update viacerých riadkov v tabuľke + postupná inkrementácia hodnoty

před 9 lety

pepcisko
Člen | 3

zdravím, posielam na mySql databázu takúto query:

SET @pos := 0; UPDATE `albums` SET `position` = (SELECT @pos := @pos + 1) WHERE `parent` = 1 ORDER BY `position`;

a dostávam DibiDriverException s hláškou

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATE `albums` SET `position` = (SELECT @pos := @pos + 1) WHERE `parent` = 1 OR' at line 1' in C:\Data\webs.....

Zaujímavé je že keď rovnakú query (copy paste z DibiDriverException->getSql(); ) pošlem na databázu napr. cez HeidiSQL tak to funguje bez problémov.

Netušíte niekto kde robím chybu? Dibi je verzia 1.3-dev, revizia af6352d released on 2010–11–10, php 5.3.3, driver používam mysqli..

ďakujem..

před 9 lety

blacksun
Člen | 181

Nepřiřazuje se do proměnné bez dvojtečky?

Jinak zkus napsat kus kódu, jak ten dotaz zapisuješ, možná v tom bude nějakej nenápadnej bug..

před 9 lety

pepcisko
Člen | 3

to som si už opravil, je fakt že s dvojbodkou sa to dáva len mimo SET-u. Nová query je

SET @pos = 0; UPDATE `albums` SET `position` = (SELECT @pos := @pos + 1) WHERE `parent` = 1 ORDER BY `position`;

ale robí to presne to isté..

php kód je jednoduchý, v podstate len toto:

dibi::query('SET @pos = 0; UPDATE [photos] SET [position] = (SELECT @pos := @pos + 1) WHERE [id_album] = %i', $id_album, 'ORDER BY [position];');

Edit: vlastne je to jedno, priradenie cez SET môže byť = alebo :=, len v SELECTe musí byť :=

Editoval pepcisko (29. 12. 2010 10:37)

před 9 lety

paranoiq
Člen | 388

přes dibi::query (mysqli::query) jde poslat pouze jeden dotaz. rozděl to do dvou volání. session proměnná @pos je platná pro celou dobu spojení s databází, takže to bude fungovat i tak

dibi::query('SET @pos = 0;');
dibi::query('UPDATE [photos] SET [position] = (SELECT @pos := @pos + 1) WHERE [id_album] = %i', $id_album, 'ORDER BY [position];');

HeidiSQL nejspíš používá k odeslání multi_query (http://cz.php.net/…ti-query.php) či tak něco

před 9 lety

pepcisko
Člen | 3

funguje to, ďakujem :)