Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




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

> Original message text:
> 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
>
> Намекните, пожалуйста, в какую сторону думать.
>


From: Kaverdo - 05/07/2005 - 06:43:29
Subject:сам дурак :-)
-----------------
Надо глубже вчитываться в короткий текст ошибки: Not unique table/alias :-)
...LEFT JOIN users AS last_users ON children.user_id=last_users.user_id...

Вот что в итоге:

SELECT
root.forum_id,
root.date,
IFNULL(children.date,root.date) AS last_dt,
IFNULL(users.login,root.author) AS author,
IFNULL(last_users.login,children.author) AS last_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
LEFT JOIN users AS last_users ON children.user_id=last_users.user_id

WHERE root.parent_id=0
GROUP BY root.forum_id


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
22890



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |