У меня есть следующая таблица:
myTable:
+----+----------+
| id | parentID |
+----+----------+
| 1 | null |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 4 |
-----------------
я хотел бы вернуть все строки, прослеживающие, пока нет не порождено больше. Так ".... ГДЕ id=5" дал бы мне:
5, 4, 2, 1
Вы организуете свои иерархические данные с помощью модели списка смежности . Тот факт, что такие рекурсивные операции сложны, на самом деле является одним из основных недостатков этой модели.
Некоторые СУБД, такие как SQL Server 2005, Postgres 8.4 и Oracle 11g, поддерживают рекурсивные запросы с использованием общих табличных выражений с ключевым словом WITH
.
Что касается MySQL, вам может быть интересно прочитать следующую статью, в которой описывается альтернативная модель (модель вложенных множеств ), которая упрощает (возможно) рекурсивные операции:
Кроме того, я также предлагаю ознакомиться с презентацией Билла Карвина , указанной в комментариях выше. Описанная модель закрывающей таблицы является очень действенной альтернативой вложенному набору.