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
+
0
-

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)

thorewi
Člen | 84
+
0
-

Myslím si, že nemůžeš dvakrát joinovat stejnou tabulku, protože to NDB neumí korektně aliasovat.