Иерархические данные в MySql

У меня есть таблица с родительским дочерним отношением, я хочу справку на рекурсивном запросе

Структура таблицы

roleId,  roleName,      parentId
1        Admin          0
2        Backup Admin   1
3        Office User 1  0
4        User 1         3
5        User 2         3
6        Office User 2  0
7        Off User 1     6

Я пытаюсь сделать рекурсивный запрос, но я не могу сделать, предложите меня, как я должен запросить базу данных, например.

  Admin
  -- Backup Admin
  Office User 1
  -- User 1
  -- User 2
  Office User 2
  -- Off User 1
6
задан rudrasiva86 19 December 2013 в 14:12
поделиться

3 ответа

Как указывалось выше, это не совсем рекурсивно, но если вы знаете, сколько шагов в глубину вам нужно пройти как максимум, вы можете использовать что-то в этом роде (возможно, использовать PHP для генерации запроса):

I Сначала я установил родительский ID равным NULL, а не 0, но это личное предпочтение.

SELECT * FROM table t1
LEFT JOIN table t2 ON t2.parent_id = t1.role_id
LEFT JOIN table t3 ON t3.parent_id = t2.role_id
WHERE t1.parent_id IS NULL

^^ как бы глубоко вам ни пришлось зайти в этом случае.

[ следующий бит не является строго релевантным ]

Затем вы можете управлять выводом в следующих строках:

SELECT
        (CASE 
        WHEN (t1.name IS NULL AND t2.name IS NULL) THEN t3.name
        WHEN (t1.name IS NULL AND t2.name IS NOT NULL) THEN t2.name
        ELSE t1.name END)  AS first,
        (CASE 
        WHEN (t1.name IS NOT NULL AND t2.name IS NOT NULL) THEN t2.name
        WHEN (t2.name IS NULL AND t3.name IS NOT NULL) THEN NULL
        ELSE t3.name END)  AS second,
        (CASE 
        WHEN (t1.name IS NOT NULL) THEN t3.name
        ELSE  NULL END)  AS third
FROM
2
ответ дан 17 December 2019 в 04:45
поделиться

MySQL напрямую не поддерживает рекурсивные запросы.

Вам нужно будет подражать этому, написав функцию, которая хранит стек рекурсии в переменной сеанса.

См. Эту статью в моем блоге о том, как это сделать:

1
ответ дан 17 December 2019 в 04:45
поделиться

Один раз запросите таблицу, получив все имена и идентификаторы, затем создайте tree на любом языке программирования, который вы используете.

2
ответ дан 17 December 2019 в 04:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: