[2.1dev] ORDER BY + LIMIT = špatně sestavený dotaz?

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

Zdravím, mám problém s následujícím dotazem

$this->sf->table($this->tbl)->where('type', $showPunishments)->page($page, $this->itemsPerPage)->order($sort, $order)->fetchAll();

který se vygeneruje jako

SELECT *
FROM `banlist`
WHERE (`type` IN (0, 1, 2, 3, 4, 5, 6, 7, 9, 8))
ORDER BY `temptime`
LIMIT 10 desc

takže nefunguje (‚desc‘ je špatně za LIMIT místo ORDER BY).

Zkoušel jsem místo page() metody použít i normálně limit(), ale výsledek je ten samý.
Pokud však vynechám order(), tak se dotaz vygeneruje správně. Zkoušel jsem i prohazovat pořadí page() a order(), ale ani tak se mi nepodařilo docílit, aby se dotaz vygeneroval správně.

Samozřejmě, mohl bych použít normálně query() a napsat si to sám, ale zajímalo by mne, jestli někde dělám chybu já, nebo se jedná o bug. :)

Verze PHP: 5.3.26
Verze Nette: Nette Framework 2.1dev (revision c555fb9 released on 2013–07–08)

Díky,
Mysteria

Jan Tvrdík
Nette guru | 2595
+
0
-

@Mysteria: Zkus do proměnné $order dát místo desc DESC.

Mysteria
Člen | 797
+
0
-

@Jan Tvrdík: Nepomohlo, dotaz je postavený stejně, jenom s velkýma písmenama.

David Matějka
Moderator | 6445
+
0
-

druhy a dalsi argumenty funkce neslouzi k urceni smeru, spravny zapis je

->order('foo DESC')

ty argumenty slouzi jako parametry do dotazu, napr

->order('country = ?, country ASC', 'cz');

jelikoz tam vsak nemas parametr, tak se zbyle parametry „nejak“ nahazeji na konec dotazu. ale lepsi chovani by asi bylo, kdyby to vyhodilo exception

Mysteria
Člen | 797
+
0
-

Aha, jasně, tohle už funguje bez problémů.

... ->order('? ?', $sort, $order)->fetchAll();

nebo

... ->order($sort . ' ' . $order)->fetchAll();

Taky mě to mohlo napadnout, díky moc.

Editoval Mysteria (11. 7. 2013 14:59)