Запрос в запросе

Vlad_sql
Дата: 17.12.2012 21:15:40
Всем доброго времени суток!
Подскажите как составить следующий запрос:
Есть таблица TABLE, в ней два поля ID и PARENT_ID. То есть каждая запись одновременно и родитель и дочерняя.
Не может указывать сама на себя. Примерно так:
ID | PARENT_ID
1 | 0
2 | 1
3 | 1
4 | 1
5 | 4
6 | 0
7 | 6

То есть структура получается такая:

1
---2
---3
---4
------5
6
---7

Нужно выбирая ID = 1 получать получать все дочерние, и их дочерние, такое реально и как выглядит подобный запрос?
То есть результат выборки ID = 1 должен получиться ID 1 2 3 4 5
Akina
Дата: 17.12.2012 21:28:45
При неограниченной глубине вложенности - рамках запроса никак.
Измените структуру хранения.
Vlad_sql
Дата: 17.12.2012 21:41:18
Akina,
А если добавить в структуру:
ID | PARENT_ID | PATH
1 | 0 | 0
2 | 1 | 1
3 | 1 | 1
4 | 1 | 1
5 | 4 | 4,1
6 | 0 | 0
7 | 6 | 6

То есть писать ID через запятую как полный путь, можно как то проверить содержит ли строка PATH ID записи (повтора/дубля быть не может) и выбрать все записи? LIKE подойдет? Но в одной строке может быть и ID 10 и 100 к примеру.
trew
Дата: 17.12.2012 22:09:49
Vlad_sql,

Проектирование баз данных: иерархические структуры. Деревья в SQL
Выберите удобный Вам вариант, если есть возможность по-другому спроектировать таблицу.
(примеры можно адаптировать и для mysql)
Arhat109
Дата: 17.12.2012 22:32:59
Akina,

а это 13527464 , я так понимаю, "новичкам" - не рекомендуете? Очень хороший способ "сломать моск" :)
Vlad_sql
Дата: 17.12.2012 22:36:02
trew, спасибо огромное, думаю материализованные пути мне отлично подойдут!
Akina
Дата: 17.12.2012 23:40:55
Arhat109
а это 13527464 , я так понимаю, "новичкам" - не рекомендуете? Очень хороший способ "сломать моск" :)
Я и себе этот метод не рекомендую. При не-точечном применении он, думаю, породит совершенно несопровождаемый продукт...
Vlad_sql
Дата: 18.12.2012 08:16:32
Arhat109,

Жесткий запрос) еслиб я в него полез, думаю на неделю бы, и получилось бы что то вроде этого))
Arhat109
Дата: 18.12.2012 08:21:09
Vlad_sql, :) жизненная картинка. Только, на самом деле, вся красота этого запроса - как раз та дверка (правда потайная)... а все лазют через забор... или идут в обход (множественный джойн) :)

Он построен на исключительно глубоком понимании работы SQL движка. Правда конкретного, с конкретной потайной дверкой. :)
tanglir
Дата: 18.12.2012 08:24:40
Arhat109
Он построен на исключительно глубоком понимании работы SQL движка. Правда конкретного, с конкретной потайной дверкой. :)
Это не дверка, а скорее расшатанная доска, которую в любой момент могут заменить или прибить. Или она просто застрянет и перестанет отходить (индексы и т.п.).