Я использую модель MPTT (модифицированный обход дерева предзаказов) для хранения иерархических данных в моей таблице MySQL. (Модель MPTT: другое описание - модель вложенного набора .). У меня такой вопрос: кто-нибудь нашел умный способ сортировки результатов запроса по дереву? Я мог бы просто перейти к метке ORDER BY, но тогда результирующий набор будет отсортирован по метке без учета места или глубины узлов в дереве.
Вот пример запроса, который я использую для получения дерева произвольного узла с глубиной каждого узла:
SELECT node.id, (COUNT(parent.id) - (sub_tree.depth + 1)) AS depth
FROM person AS node,
person AS parent,
person AS sub_parent, (
SELECT node.id, (COUNT(parent.id) - 1) AS depth
FROM person AS node,
person AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND node.id = 1 // that's my root object
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
ORDER BY node.lft
Согласно http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/.
Конечно, это всегда упорядочивает элементы по их месту во вложенном множестве. Что, если я хочу заказать их, скажем, «lastName» или «accountBalance» или «town»? Можно ли это сделать в MySQL, или вы думаете, что мне придется прибегнуть к сортировке результатов на моем языке сценариев?