Допустим все пункты многоуровнего меню хранятся в одной таблице. id title parent_id 1 Техника 0 2 Оборудование 0 3 Землеройная техника 1 4 Мини-техника 1 5 Другое оборудование 2 6 Автогрейдеры 3 7 Бульдозеры 3 8 Мини-погрузчики 4 С первым уровнем всё просто, выбрать все с parent_id = 0. Но возможно ли одним запросом получить все пункты меню 2 или 3 уровней?
Для Nested Set должно быть такое, всё в одной колонке. Ещё посмотри Matherialized Path, эти два алгоритма более функциональны, чем твой Adjacency List. --- Добавлено --- SQL примеры с Nested Set http://www.getinfo.ru/article610.html
все пункты меню можно просто выбрать скопом, это быстро. А в пхп дерево построить и не париться. Nested sets + родитель должны решить задачу. Но её не нужно так решать. В меню тыща пунктов не бывает.
Мне не нужно дерево. У меня 2 селекта, в одном нужны все пункты 2 уровня, в другом все 3 уровня. Взять всё и в цикле раскидать куда надо не проблема. Но мне было интересно можно ли сделать это за раз, выборкой из БД.
можно, конечно. Но это смысла не имеет. Для выборки всех пунктов меню подряд потратится меньше ресурсов и времени, если их мало. --- Добавлено --- а, да, и в бд можно сохранять лвл глубины. Тогда и задача решается и просто будет. Но это денормализация
@denis01 дал ссылку с примерами уровня глубины. Вроде простая вещь, но почему-то такая мысль в голову не приходила. Но я так делать не буду. Если база моя ещё можно так сделать, но в какой-нибудь ЦМС так уже не cделать. Запилю рекурсию, ключ массива - лвл.