Получение корневых и конечных узлов для данного идентификатора - Как? - PullRequest
4 голосов
/ 16 августа 2010

Предположим, у меня есть таблица, которая имеет следующую структуру:

=================
| Id | ParentId |
=================
| 1  | 0        |
| 2  | 1        |
| 3  | 1        |
| 4  | 2        |
| 5  | 2        |
| 6  | 3        |
| 7  | 3        |
-----------------

Это приводит к такому дереву:

     1
    / \
  2     3
 / \   / \
4   5 6   7

Учитывая идентификатор, как мне получить все листовые узлы? Таким образом, если заданный идентификатор равен 2, возвращаемое значение должно быть 4 и 5. Указанный идентификатор никогда не будет самим листовым узлом.

Я не уверен, как изменить SQL здесь: http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

SELECT t1.name FROM
category AS t1 LEFT JOIN category as t2
ON t1.category_id = t2.parent
WHERE t2.category_id IS NULL;

РЕДАКТИРОВАТЬ1: Кроме того, как мне получить корневой идентификатор для данного идентификатора? Итак, если заданный идентификатор равен 2, возвращаемое значение должно быть 1.

1 Ответ

2 голосов
/ 16 августа 2010

"Кроме того, как мне получить корневой идентификатор для данного идентификатора? Итак, если заданный идентификатор равен 2, возвращаемое значение должно быть равно 1."

Это довольно легко,это ParentId!

Вы получите детей с помощью следующего запроса:

SELECT child.Id FROM theTable current LEFT JOIN theTable child ON child.ParentId = current.Id;

Кстати, я бы не рекомендовал использовать 0, когда в строке нет родителя, я 'В этом случае лучше использовать NULL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...