Я уже давно создаю веб-страницы PHP, но я не очень хорошо знаком с базами данных MySQL. Я тщательно искал решения таких проблем, как мои, но не повезло (хотя были ответы на подобные вопросы, я не мог понять, как реализовать предоставленное решение).mysql иерархический рекурсивный запрос
У меня 5 таблицы в виде иерархической структуры 3 уровня следующим образом:
Clients (id, name, ...)
↳ Projects (id, client_id, name, ...)
↳ Contacts (id, project_id, name, ...)
↳ Files (id, project_id, name, ...)
↳ Events (id, project_id, name, ...)
Я пытаюсь достичь рекурсивного запроса с твистом: если я предоставить идентификатор любого уровня (с указанием уровня этот идентификатор принадлежит), он должен возвращать этот уровень как родительских, так и дочерних записей в древовидной структуре.
Например: у меня есть ИД проекта, поэтому я хотел бы вернуть Клиента (родителя), к которому принадлежит Проект, а также Контакты, файлы и события проекта (дети). Или, если у меня есть Идентификатор события, я хотел бы вывести Project (родительский), Клиент (родительский родитель), а также Контакты и Файлы (которые находятся на том же уровне, что и События).
Суть заключается в том, чтобы просмотреть полную историю выбранного элемента. Возможно ли это с помощью одного запроса ...? Любые предложения приветствуются и оцениваются!
Спасибо за быстрый ответ и пример! Похоже, я был на том же пути: я попробовал LEFT JOIN (без UNION, поскольку таблицы имеют разное количество столбцов), но не мог понять, как отфильтровать возвращаемый набор данных. Как бы вы дифференцировали уровни, чтобы сделать из них древовидную структуру? А также, можете ли вы указать на слабость моего дизайна («огромная избыточность»)? – laciii
Как пример избыточности, что, если контакт связан с несколькими проектами? Насколько я могу судить, здесь нет «уровней», но см. Http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to -Меня-быть-а-простейшими SQL-запрос – Strawberry