У меня есть стол, который я делаю самостоятельно.Моя примерная таблица выглядит такпервый уровень пользователя parent = 1.
Чтобы найти внука пользователя parent = 1, я ищу ребенка, который является потомком дочернего элемента parent parent = 1. Комуполучить правнука (3-й уровень), я ищу ребенка, который является ребенком, который является ребенком ребенка родителя = 1. ... и т. д.
Это может немного запутать, но мой запрос работает нормально.Мне было интересно, есть ли гораздо более быстрый / оптимизированный способ сделать это, поскольку я только повторяю свой sql повсюду.
-- Get Child
SELECT parent, child AS '1st Level' FROM genealogy WHERE parent=1;
-- Get Grandchild
SELECT a.parent, b.child AS '2nd Level' FROM (SELECT * FROM genealogy WHERE parent=1) a INNER JOIN genealogy b ON a.child=b.parent;
-- Get Great-Grandchild
SELECT a.parent, b.child AS '3rd Level' FROM (SELECT a.parent, b.child FROM (SELECT * FROM genealogy WHERE parent=1) a INNER JOIN genealogy b ON a.child=b.parent) a INNER JOIN genealogy b ON a.child=b.parent;
-- And the list goes on