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

  • Автор темы Автор темы Avron2
  • Дата начала Дата начала

Avron2

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


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

| 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
Вот результат:
result-jpg.167



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

Вложения

  • table.JPG
    table.JPG
    67,3 KB · Просмотры: 32
  • result.JPG
    result.JPG
    25,8 KB · Просмотры: 32
Если тебя интересует только вложенность на 1 уровень, то
Код:
SELECT ... FROM themes AS m
JOIN themes AS s ON s.parent_id = m.id
WHERE m.parent_id = 0
Если хочешь достать всех потомков, то одним запросом никак.

Но вообще не трахай себе мозг и используй nested sets.
 
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
1-jpg.168

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

Вложения

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

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