MySQL несколько левых соединений

Я пытаюсь создать страницу новостей для веб-сайта, я продолжаю работать. Я решил, что хочу использовать правильные вопросы MySQL (значение ГРАФА (id) и соединения вместо больше чем одного вопроса или num_rows.) я использую обертку PDO, которая должна функционировать прекрасная, и это все еще терпит неудачу, когда управляется непосредственно через применение MySQL CLI.

В основном у меня есть 3 стола. Каждый держит новости, каждый держит комментарии, и каждый держит пользователей. Моя цель здесь состоит в том, чтобы создать страницу, которая показывает все (будет нумеровать страницы позже), новости публикуют названия, тела, авторов и даты. Это хорошо работало, когда я использовал второй вопрос, чтобы получить имя пользователя, но тогда я решил, что буду скорее использовать СОЕДИНЕНИЕ.

Таким образом, какова проблема? Ну, мне нужны два соединения. Нужно заставить имя пользователя автора и другой получать количество комментариев. Когда я просто иду для имени пользователя автора, все работы как ожидалось. Все ряды (есть 2) в столе новостей, показаны. Однако, когда я добавил это второе ОСТАВЛЕННОЕ СОЕДИНЕНИЕ для ряда комментариев, я заканчиваю тем только, что получил один ряд от новостей (помните, есть 2), и ГРАФ (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

Кроме того, только чтобы быть уверенными в еще одной вещи, мои левые соединяют с комментариями, правильный способ получить все посты независимо от того, есть ли у них комментарии или нет, правильные? Или это было бы правильным соединением? О, одна последняя вещь..., если я переключаю комментарии news_id = news.id к news.id = комментарии news_id, я получаю 0 результатов.

56
задан John M. 2 January 2010 в 19:25
поделиться

1 ответ

Вы пропустили пункт GROUP BY:

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
GROUP BY news.id

Левое соединение верно. Если бы Вы использовали INNER или RIGHT JOIN, то не получали бы новости без комментариев.

.
102
ответ дан 26 November 2019 в 17:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: