Jak v nette\database do ORDER BY dostat poddotaz?

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

Zdravím, existuje způsob, jak dostat poddotaz (viz níže) do Selection->order(), aniž by došlo k vytváření joinů?

$order = 'EXISTS (
	SELECT * FROM modification WHERE
	(modification.offer_id = offer.id) AND
	(modification.type = 1024) AND
	(NOW() BETWEEN modification.start_time AND modification.end_time)
) DESC';

Takto se to automaticky snaží spojit tabulky offer a modification, což je jednak zbytečné a jednak, aby to fungovalo, muselo by se „modification.“ nahradit za „modification:“.

hrach
Člen | 1834
+
0
-

Hm, aktualne to asi nejde. Zkusim promyslet reseni. Otazka je, jestli pouziti SqlLiteral by bylo patricne logicke.

Caine
Člen | 216
+
0
-

SqlLiteral bylo první, co jsem zkusil, ale po prozkoumání zdrojáků jsem zjistil, že se to tam vůbec nepoužívá… :(

Ot@s
Backer | 476
+
0
-

Možná budu uvažovat špatným směrem, ale… Má smysl dělat podporu pro podobně extrémní zápisy pro „fluent-like“ synaxi? Jde o to, že (např) sub-selekty se v různé části SQL dotazů u některých RDMS nedají ani použít. K těmto (občas) legitimním SQL dotazům se přece dá použít query/exec (případně přímo pohled v db). Neříkám, aby se nedělala podpora SqlLiteral pro order, ale byl bych pro stanovení stop hranice, kdy jo a kdy ne.

hrach
Člen | 1834
+
0
-

Otos: ano, přesně podoným způsobem jsem už uvažoval a mám v hlavě koncept, který by snad uspokojil tvuj(nas) nazor, ale i potreby ostatnich.

Caine
Člen | 216
+
0
-

V tomhle případě nemůžu použít query/exec, protože jsem vzal Selection, který se perfektně hodí k filtrování a řazení dat, a rozšíříl to o svý metody. No a teď jsem to potřeboval rozšířit o tohle „extremní“ řazení. Mě osobně to zas tak extrémní nepřijde, každopádně celý by to pěkně vyřešil právě SqlLiteral.