







|
MySQL.RU - Webboard
Вернуться
Сложное объединение таблиц (Kaverdo) 05/07/2005 - 05:29:48
Re: сам дурак :-) (Kaverdo) 05/07/2005 - 06:43:29
Re: Примечание... (Валентин) 05/07/2005 - 10:22:46
From: Kaverdo - 05/07/2005 - 05:29:48
Subject:Сложное объединение таблиц
-----------------
Есть две таблицы: forum и users.
forum: forum_id, parent_id, date, user_id, author
users: user_id, login
В forum хранятся все сообщения плоского (не древовидного) форума: корневые и ответы. То есть у корневых сообщений parent_id равен нулю, у ответов равен forum_id корневого сообщения. Сообщения, написанные авторизованными пользователями содержат значимый user_id.
Задача из пяти частей:
1. Выбрать корневые сообщения
2. Посчитать количество ответов на них
3. Получить дату последнего ответа на корневое сообщение, а если ответов нет — то дату самого корневого собщения.
4. Если есть user_id у корневого сообщения, получить из users логин пользователя, иначе — просто забрать поле author.
5. п. 4 для последнего ответа на корневое сообщение (если он есть).
И все это сделать одним запросом. C первыми четырьмя все довольно просто:
SELECT
root.forum_id,
root.date,
IFNULL(children.date,root.date) AS last_dt,
IFNULL(users.login,root.author) AS author,
COUNT(children.forum_id) AS cnt
FROM
forum AS root
LEFT JOIN forum AS children ON root.id=children.parent_id
LEFT JOIN users ON root.user_id=users.user_id
WHERE root.parent_id=0
GROUP BY root.forum_id
Но на пятом пункте я споткнулся. Я ж не могу просто добавить к запросу:
LEFT JOIN users ON children.user_id=users.user_id
Намекните, пожалуйста, в какую сторону думать.
[Это сообщение - спам!]
Последние сообщения из форума
Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
22890
|
|