как получить рекурсивный результат, запросив таблицу ссылок на себя в mysql?

У меня есть самореферентная таблица «комментарии», где comments.replyToId REFERENCES comments.ID.

У меня вопрос: как мне запросить базу данных с таблицей с самоссылкой, чтобы получить результат, который правильно упорядочен, чтобы я мог представить результат в виде дерева в PHP?

я пробовал

select * from comments as comments_1 
left join comments as comments_2 
on comments_1.id = comments_2.replyToId

Я пытаюсь использовать результат этого в php


person fenerlitk    schedule 29.01.2012    source источник
comment
@zerkms Мой вопрос: как мне запросить базу данных с таблицей, ссылающейся на себя, чтобы получить результат, который правильно упорядочен, чтобы я мог представить результат в виде дерева в php? Я надеюсь, что мой вопрос теперь понятнее... спасибо   -  person fenerlitk    schedule 30.01.2012
comment
хорошо, так что плохого в том, что вы получаете от этого?   -  person Nicolas78    schedule 30.01.2012
comment
Я нашел ваш вопрос в поисках ответов, я не придумал решение, но, увидев так мало ответов на этот вопрос, я подумал, что не пожалею времени, чтобы прийти к ТАК и связать людей с решением, чтобы другие могли решить это быстрее, спасибо Роландо, он мой личный герой администратора баз данных за это умное решение. dba.stackexchange.com/questions/7147/   -  person Gabriel Acosta    schedule 18.04.2013


Ответы (1)


Вы не получите рекурсивный результат непосредственно из MySQL. Недавно было похожее обсуждение - возможно, это возможно с некоторыми СУБД, использующими хранимые процедуры и т. д., но не с готовым SQL (см. Как я могу получить идентификаторы предков для произвольной глубины рекурсии в одном SQL-запросе?).

Что я делаю вместо этого в подобных случаях: Получаю все комментарии без родителей. Затем для каждого комментария получите его дочерние элементы (если вы сохраните «глубину» каждого комментария, вы можете получить все эти дочерние элементы и все дочерние элементы следующих слоев с помощью одного SQL-запроса). Сохраните дочерние элементы в соответствующем месте в вашей древовидной структуре, повторите.

Если вам нужен более низкий уровень, вам, возможно, потребуется поделиться некоторым кодом, объяснить свою структуру данных, что вы пробовали до сих пор и т. д., это всего лишь общий подход.

person Nicolas78    schedule 29.01.2012