Теперь у нас есть вопрос, который мы обычно используем для поддержания родительского отношения к потомству, т. Е. Мы сохраняем все сущности в одной таблице с столбцом parent_id, и все топ-родители большинства имеют в столбце parent_id это хорошо и нормализованный метод я согласен, но есть и недостаток, он медленный и неэффективный. В основном это вызвано рекурсией, как для каждого родителя, мы должны выполнить запрос снова и снова, чтобы сделать это деревоПолучить верхнюю часть родительского элемента на n-й дочерний идентификатор?
SELECT id FROM `table` WHERE parent_id=something
Я посмотрел на решениях некоторые могут попытаться сделать это с любым языком программирования, запустив запрос снова и снова, что делает нагрузки на сервере, некоторые предоставили хранимую процедуру, но также включают рекурсию.
Итак, мой вопрос: можем ли мы сделать это с одним запросом базы данных для дерева (объединения или подзапросы)?
- если мы знаем глубину или если мы не знаем глубины?
- если возможно, то как мы можем получить самый верхний родительский (т.е. parent_id = 0) любого ребенка?
Если это невозможно, то почему эта техника настолько известна, хотя у нее есть недостатки или у нас есть другое решение для этого?
Я добавил SQL скрипки, но он имеет только схему
В отличие от некоторых других СУБД, MySQL не поддерживает рекурсивные функции так, не очень хорошо подходит для эта модель «списка смежности» для хранения иерархических данных. Вы должны подумать о перестройке своей схемы, чтобы внедрить иерархическую структуру в форму, которую может использовать MySQL, например, «вложенные наборы» или «транзитивные закрытия». – eggyal
@eggyal, но теперь многие многие из них выполняют эту технику, так как наиболее часто используемый Wordpress также обеспечивает уровень n-го уровня, уровень страницы и уровень категории, поэтому мой вопрос заключается в том, как лучше хранить и получать дерево без запуска нескольких запросов? –
Вы можете самостоятельно присоединяться к каждому поколению, которое хотите получить, но глубина всегда будет ограничена количеством объединений в запросе. – eggyal