parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

OFF: MySQL LEFT JOIN

R. Averkov 04.07.2005 17:46 / 04.07.2005 17:47

Есть две таблицы: forum и users.
forum: forum_id, parent_id, date, user_id, author
users: user_id, login

В forum хранятся все сообщения плоского форума: корневые и ответы. Сообщения, написанные авторизованными пользователями содержат значимый 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 forum AS children ON root.id=children.parent_id
LEFT JOIN users ON root.user_id=users.user_id
LEFT JOIN users ON children.user_id=users.user_id
...
Намекните, пожалуйста, в какую сторону думать.

  • OFF: MySQL LEFT JOIN, R. Averkov [M] 04.07.2005 17:46 / 04.07.2005 17:47