MySQL - левое соединение и COUNT () - PullRequest
8 голосов
/ 14 ноября 2010

У меня есть 3 таблицы:

  1. форумы

идентификатор, имя, описание

Темы

Идентификатор темы, идентификатор_форума, идентификатор_пользователя, заголовок, содержимое, просмотры

posts

post_id, thread_id, author_id, content, date

Что я хочу сделать, это получить все темы на форуме, иполучить количество сообщений каждой темы.Таким образом, я получаю каждую ветку (WHERE forum_id = что угодно), а затем оставляю сообщения в таблице, чтобы подсчитать результаты.Но что-то не работает.Вот мой запрос:

SELECT t.*, u.nick, COUNT(p.post_id) AS postcount
  FROM
    threads t
  LEFT JOIN
    users u
    ON
       u.id = t.user_id  
  LEFT JOIN
     posts p
     ON
       p.thread_id = t.thread_id
  WHERE
     t.forum_id = $this->forumID

Этот запрос покажет только (я думаю) темы, в которых есть какие-либо сообщения.Я также пытался использовать оператор GROUP BY, но он вызывает ошибку MySQL ...

Как я могу решить эту проблему?

----------- РЕДАКТИРОВАТЬ: Я попытался добавить GROUP BY t.thread_id, однако, как я уже говорил, ошибки MySQL:

В синтаксисе SQL есть ошибка;проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с 'WHERE t.forum_id = 2' в строке 15

Полный запрос:

SELECT t.*, u.nick, COUNT(p.post_id) AS postcount
  FROM
    threads t
  LEFT JOIN
    users u
    ON
       u.id = t.user_id  
  LEFT JOIN
     posts p
     ON
       p.thread_id = t.thread_id
  GROUP BY
     t.thread_id
  WHERE
     t.forum_id = $this->forumID

РЕДАКТИРОВАНИЕ2:

Плохо, я поместил утверждение GROUP BY там, где его не должно было быть.Теперь решено.

Ответы [ 2 ]

10 голосов
/ 14 ноября 2010

GROUP BY - правильный путь, поэтому просто добавьте: GROUP BY t.thread_id

0 голосов
/ 14 ноября 2010

Вы должны добавить GROUP BY t.thread_id, u.nick

...