Jak zapisovat komplikovanější dotazy v NDB?
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- castamir
- Člen | 629
Nedávno jsem narazil na zmínku o existenci tečkové a dvojtečkové notace pro vytvoření joinu v dotazu přes NDB, ale rád bych se dozvěděl trošku víc o tom, jak to používat (v doku o tom není snad ani zmínka).
Řekněme, že mám následující tabulky (closure tables) a chci získat podstrom. K tomu používám následující sql dotaz:
SELECT c.*, cc.ancestor, cc.depth
FROM
category c
JOIN category_closure cc
ON (c.category_id = cc.descendant)
WHERE cc.ancestor = 1 AND cc.depth > 0
ORDER BY cc.depth, c.order;
Předtím jsem toto řešil přes select z category_closure a motedu ref do tabulky category. Ale na trošku komplikovanější dotaz jsem už musel použít query, který vrací Statement a ten ref nemá. Takže bych se rád dozvěděl, zda jde napsat následující dotaz jinak, než pomocí query:
SELECT c.*, cc2.ancestor, cc.depth
FROM
category c
JOIN category_closure cc
ON (c.category_id = cc.descendant)
JOIN category_closure cc2
USING (descendant)
WHERE cc.ancestor = 1 AND cc.depth > 0 AND cc2.depth = 1
ORDER BY cc.depth, cc2.ancestor, c.order;
Z tohoto dotazu totiž lze, na rozdíl od prvního, rekonstruovat strukturu podstromu.
Editoval castamir (25. 1. 2013 15:27)