Помогите с запросом

Avron2

Новичок
Есть исходная таблица "Темы форума" (id_parent=0 - это корневые, а иначе вложенные в др.тему)


Помогите составить запрос, чтобы результатом его было следующее

| id | theme |
________________________
1 PHP
90 Регулярные выражения
96 ООП
102 Сессии
________________________
89 Delphi
100 Работа с InterBase
109 ООП
....................................


и т.д.
А еще лучше если бы вывести это все в виде дерева

Т.е. нужно выбрать инфу по принадлежности к главной теме. В 1-ом блоке результата запроса все подтемы, которые принадлежат теме PHP
Во 2-ом блоке все, которые принадлежат Delphi.

Как я понимаю одним запросом здесь не обойтись.

У меня получилось вот что:

PHP:
SELECT t1.theme AS t1_theme, t2.id AS t2_id, t2.id_parent AS t2_parent, t2.theme AS t2_theme
FROM forum.themes AS t1, forum.themes AS t2
WHERE t1.id
IN (
SELECT t2.id_parent
FROM forum.themes
WHERE (
t2.id_parent = t1.id
)
)
ORDER BY t1.theme, t2.theme
Вот результат:



но здесь не попали темы, у которых нет детей и корневые темы PHP и Delphi тоже не попали в t2_theme.
 

Вложения

Вурдалак

Продвинутый новичок
Если тебя интересует только вложенность на 1 уровень, то
Код:
SELECT ... FROM themes AS m
JOIN themes AS s ON s.parent_id = m.id
WHERE m.parent_id = 0
Если хочешь достать всех потомков, то одним запросом никак.

Но вообще не трахай себе мозг и используй nested sets.
 

Avron2

Новичок
PHP:
SELECT m.theme AS t1_theme, s.id AS t2_id, s.id_parent AS t2_parent, s.theme AS t2_theme
FROM themes AS m
JOIN themes AS s ON s.id_parent = m.id
WHERE m.id_parent =0

Спаибо, но это не то. Значит надо будет программно извращаться.
PHP:
SELECT id,id_parent, theme FROM forum.themes ORDER BY id_parent, theme
и затем каждое id передавать в рекурсию и чтобы она находила вложенности.
 

Вложения

  • 16,6 KB Просмотры: 32

Вурдалак

Продвинутый новичок
полистать форум было лень?
— я вот тоже не имею привычки просто так листать соседние темы. Если что — в поиск, но, наверное, не всегда имеется возможность хорошо сфорумировать поисковый запрос. Прочитать приведённую по ссылке тему я вот тоже не смог. Краткость — сестра таланта... Так что я не понимаю в чём виноват автор темы.

P.S. Ты-то, небось, сам ту тему запомнил только из-за того, что сам в ней ответил.
 

Avron2

Новичок
Вообще должны быть модераторы, которые бы объединяли смежные темы в одну. На ixbt.com так и делают.
Не всегда по ключевым словам можно найти интересующий вопрос. По названию темы искать - тоже не всегда можно найти, тем более что немало тем с названиями Help, Sos, Помогите новичку и т.д.
 
Сверху