Я пытаюсь создать страницу новостей для веб-сайта, над которым я работаю. Я решил, что хочу использовать правильные запросы MySQL (что означает COUNT (id) и объединяет вместо нескольких запросов или num_rows.) Я использую оболочку PDO, которая должна функционировать нормально, и это все еще не выполняется при запуске непосредственно через MySQL CLI.
В принципе, у меня есть 3 таблицы. Один держит новости, один держит комментарии, а один держит пользователей. Моя цель здесь - создать страницу, которая отображает все (позже будет разбита на страницы) заголовки новостей, тела, авторы и даты. Это отлично работало, когда я использовал второй запрос для получения имени пользователя, но потом решил, что лучше использовать JOIN.
Так в чем проблема? Ну, мне нужно два объединения. Один из них - получить имя пользователя автора, а другое - получить количество комментариев. Когда я просто использую имя пользователя автора, все работает так, как ожидалось. Отображаются все строки (есть 2) в таблице новостей. Однако, когда я добавил эту вторую LEFT JOIN для строки комментариев, я получаю только одну строку из новостей (помните, что есть 2,) и COUNT (comments.id) дает мне 2 (она должна отображать 1, так как у меня есть комментарий для каждого сообщения.)
Что я делаю неправильно? Почему это только отображение одного сообщения в новостях и утверждение, что у него есть два комментария, когда есть два сообщения новостей, каждый из которых имеет один комментарий?
SELECT news.id, users.username, news.title, news.date, news.body, COUNT(comments.id)
FROM news
LEFT JOIN users
ON news.user_id = users.id
LEFT JOIN comments
ON comments.news_id = news.id
Кроме того, чтобы быть уверенным в другом, мое левое соединение с комментариями - это правильный способ получить все сообщения независимо от того, есть ли у них комментарии или нет, правильно? Или это будет подходящее соединение? О, последнее, что... если я переключу comments.news_id = news.id на news.id = comments.news_id, я получаю 0 результатов.