Nette\Database jak aplikovat limit na related uz v sql?

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

Ahoj

ahoj mam dotaz k nette database. jak mohu aplikovat na related limit?
$author->related(‚book‘)->limit(2) as $book sice funguje ale limit se aplikuje az v php a z db se mi vraci vsechny radky z book.
SELECT * FROM book WHERE (book.author_id IN (1, 2))

jtousek
Člen | 951
+
0
-

To už z podstaty věci nelze. Ten limit(2) totiž znamená vyber 2 řádky z dané related skupiny, takže potřebuješ 2 řádky s author_id=1 a 2 řádky s author_id=2. Právě vybírání N prvků z každé skupiny je jedna z nejslabších stránek SQL (afaik) a řešení jsou vesměs poměrně složitá.

Alternativou je spustit dotazy samostatně pro author_id=1 a 2, ale to zase budeš mít dva dotazy místo jednoho. Zda by to bylo efektivnější nebo ne těžko říct, zřejmě to bude případ od případu jiné. Tak jako tak, Nette\Database se snaží minimalizovat počet dotazů, proto se chová takto.

pEeLL
Člen | 23
+
0
-

jtousek

tohle me nenapadlo. diky za link mrknu.

hrach
Člen | 1838
+
0
-

Do budoucna se to bude resit pres union.