|
Помогите написать хитровыдуманный запрос
|
|||
---|---|---|---|
#18+
Помогите написать хитровыдуманный запрос, есть иерархическая таблица - боги Древней Греции. У каждой записи, есть поле parent_id - идентификатор родителя записи, level - уровень записи. Уровень 1. Корень - Хаос (дети: Зевс, Посейдон) Уровень 2. Зевс (дети: Афина, Гермес) Посейдон(дети: Тритон) Уровень 3. Афина (дети: Эрхитоний) Гермес (дети: нет) Тритон (дети: нет) Уровень 4. Эрхитоний (дети: нет) Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Как итог имеем n-арное дерево, нужно написать хитровыдуманный запрос, который сделает прямой обход этого дерева. В итоге нужно получить список: 1) Хаос 2) Зевс 3) Афина 4) Эрхитоний 5)Гермес 6) Посейдон 7) Тритон ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2018, 02:15 |
|
Помогите написать хитровыдуманный запрос
|
|||
---|---|---|---|
#18+
Я вижу следующие ошибки в постановке задачи. 1) Бога Эрхитония не существует. 2) Вставка в таблицу значения level излишняя, так как level можно вычислить по parent_id. Потенциально ведёт к ошибкам. 3) Противоречие между текстом в постановке задачи и примером таблицы. В тексте задаются пары родитель-потомок, а в таблице пары потомок-родитель. Можно сделать таблицу с несколькими строками для каждого родителя (по одной строке на потомка, и в этом случае необязательна колонка parent_id). То есть, привести в соответствие таблицу с текстом задачи. Для обоих видов таблицы нужное решение можно получить с помощью обхода в глубину, который реализовать с помощью WITH RECURSIVE. Подходящий вид таблицы можно выбрать исходя из того, в каком порядке поступают данные. Я для себя составил примеры запросов WITH RECURSIVE для обоих видов таблицы. но без богов. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2018, 10:02 |
|
|
start [/forum/topic.php?fid=53&tid=1995470]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
50ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 156ms |
0 / 0 |