Používam vnorený množinový model na ukladanie veľkej hierarchie údajov v lokálnej databáze SQLite v iPhone. Čítal som MySQL tech článok z ich webovej stránky o tom, ako to urobiť, ale jeden z dotazov, ktoré navrhujú (a ktoré potrebujem), sa javí, že nebude pracovať s SQLite a neviem, ako sa s tým obísť.
SELECT node.name, (COUNT(parent.name) - (sub_tree.depth + 1)) AS depth
FROM line_items AS node,
line_items AS parent,
line_items AS sub_parent,
(SELECT node.name, (COUNT(parent.name) - 1) AS depth
FROM line_items AS node,
line_items AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND node.name = "Power Up"
GROUP BY node.name
ORDER BY node.lft
) AS sub_tree
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND node.lft BETWEEN sub_parent.lft AND sub_parent.rgt
AND sub_parent.name = sub_tree.name
GROUP BY node.name
HAVING depth <= 1
ORDER BY node.lft;
SQLite to nahlási sub_tree.name
nie je to stĺpec, a predpokladám, že je to preto, že jeho implementácia poddotazu je neúplná. Má niekto nejaké nápady, ako obísť toto obmedzenie?
Účelom dotazu je získať všetky bezprostredné deti daného rodičovského uzla.
odpovede:
3 pre odpoveď č. 1Skúste v poddotaze použiť výraz „názov uzla s menom AS“.
SELECT node.name, (COUNT(parent.name) - (sub_tree.depth + 1)) AS depth
FROM line_items AS node,
line_items AS parent,
line_items AS sub_parent,
(SELECT node.name AS name, (COUNT(parent.name) - 1) AS depth
FROM line_items AS node,
line_items AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND node.name = "Power Up"
GROUP BY node.name
ORDER BY node.lft
) AS sub_tree
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND node.lft BETWEEN sub_parent.lft AND sub_parent.rgt
AND sub_parent.name = sub_tree.name
GROUP BY node.name
HAVING depth <= 1
ORDER BY node.lft;
Zdá sa, že sa aspoň tejto chyby zbavil.