Hej!
Implementuję sobie nested set na bazie Postgresa. Używam materiałów z http://dev.mysql.com/tech-resources/articles/hierarchical-data.html i pominąwszy drobne różnice - wszystko w miarę działa. Problem mam jednak ze stworzeniem zapytania zwracającego mi tylko bezpośrednich potomków danego elementu. Są sytuacje (zależne od podanego id kategorii), gdzie działa ok, gdzie działa źle albo nie zwraca nic.
mam tablicę categories, zbudowana jest bardzo prosto:
id | title | lft | rgt
Oto zapytanie zaczerpnięte z w/w materiałów i zmienione pod moją tablicę:
SELECT node.id, (COUNT(parent.id) - (sub_tree.depth + 1)) AS depth
FROM categories AS node,
categories AS parent,
categories AS sub_parent,
(
SELECT node.id, (COUNT(parent.id) - 1) AS depth
FROM categories AS node,
categories AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND node.id = 48
GROUP BY node.id, node.lft
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.id = sub_tree.id
GROUP BY node.id, sub_tree.depth, node.lft
HAVING depth = 1
ORDER BY node.lft;
O dziwo nie działa mi w ogóle próba "ograniczenia" selecta w WHERE do potomków tlyko z depth = 1, wyświetlają się wszyscy potomkowie.
Może macie jakieś lepsze rozwiązanie?