Как я могу получить рекурсивный результат, запрашивая таблицу самоссылки в MySQL? - PullRequest
1 голос
/ 30 января 2012

У меня есть таблица с самообращением 'comments', где 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

1 Ответ

3 голосов
/ 30 января 2012

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

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

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

...