У меня есть эта таблица в MySQL
:MySQL рекурсивный выбор из одной таблицы
| id | mainid | name |
+----+--------+---------------------+
| 1 | 0 | main 1 |
| 2 | 1 | sub 1 |
| 3 | 1 | sub 2 |
| 4 | 1 | sub 3 |
| 5 | 4 | subsub 1 |
| 6 | 4 | subsub 2 |
| 7 | 0 | main 2 |
| 8 | 7 | sub 4 |
| 9 | 7 | sub 5 |
Поле mainid
является ассоциированным с id
полем.
Есть ли передовая практика в командах MySQL для выбора всех рекурсивных строк? Я хочу, чтобы select
все подэлементы по основному элементу.
Я пытался выбрать все подразделы на первом уровне, например, к югу от 1, к югу 2, sub3 находится под основной 1. Это просто:
SELECT id, mainid, name FROM mytable WHERE mainid = '1';
Но есть одна линия-команда, чтобы выбрать тот же строки И строки subsub1 и subsub 2 тоже? (И Кур, если я создаю еще более глубокие уровни вот тоже.)
Выборы включают , но не ограничиваются следующими: - Присоединить таблицу к себе столько раз, сколько может потребоваться; - обрабатывать рекурсию на уровне приложения, например с циклом PHP. Используйте хранимую процедуру для обработки рекурсии. . Переключитесь на вложенный набор (или какую-то гибридную модель) вместо «так называемой» модели списка адресов. Все эти решения более подробно рассматриваются в другом месте, в том числе ряд отличных, популярных и, следовательно, легко googled статей по иерархическим данным и MySQL. – Strawberry
[Деревья в SQL] (http://www.ibase.ru/devinfo/DBMSTrees/sqltrees.html) также могут помочь – urban