Какое соединение мне нужно для этого запроса?

#mysql #join

#mysql #Присоединиться

Вопрос:

По какой-то причине у меня всегда возникают проблемы с объединениями. В любом случае, у меня есть таблица статей и таблица article_comments. Я хочу упорядочить строки из таблицы статей по количеству комментариев, которые есть в статье. таким образом, строка в таблице комментариев будет иметь столбец для идентификатора статьи. Прямо сейчас мой запрос возвращает только строки из таблицы articles, к которой привязаны строки из таблицы comments (только статьи с комментариями). Я хочу вернуть все строки из таблицы статей, независимо от того, есть ли в ней комментарий или нет (вы можете игнорировать внутреннее соединение здесь), но я все равно хочу иметь возможность упорядочивать результаты статьи по количеству комментариев, которые есть в каждой статье, даже если оно равно 0. Я надеюсь, вы понимаете.

Это мой текущий запрос:

    SELECT 
      a.article_id, a.type, 
      p.article_id, p.platform_id, 
      c.comment_id, c.article_id, COUNT(c.comment_id) AS comments
   FROM articles AS a
   INNER JOIN article_plat_assoc AS p ON a.article_id = p.article_id 
   LEFT JOIN article_comments AS c ON a.article_id = c.article_id 
   WHERE p.platform_id = 1 
   ORDER BY comments DESC
   LIMIT 15
  

Вот SQLFiddle:
http://sqlfiddle.com /#!2/db1e8/1/0

Комментарии:

1. Что не работает с SQL, который у вас там есть?

2. Он не возвращает статьи, в которых нет комментариев. Я хочу вернуть все статьи, даже если у них нет комментариев. Я просто хочу упорядочить статьи по количеству комментариев, которые у них есть.

3. Я уверен, что это можно решить довольно быстро, но если вы хотите создать SQLFiddle, это поможет нам работать с вашими таблицами и тому подобное, чтобы найти для вас оптимальный запрос

4. Выглядит правильно для меня… Вероятно, поможет SQLFiddle.

5. Вы уверены, что в вашем результирующем наборе нет записей с comments = 0 «после»? что произойдет, если вы выполните этот запрос без LIMIT 15 ?

Ответ №1:

Поскольку у вас есть агрегатная функция Count , вам нужно GROUP BY хотя бы одно поле, иначе вы получите одну строку обратно.

 SELECT
  a.article_id, a.title, c.comment_id, c.article_id, COUNT(c.comment_id) AS comments
FROM articles AS a
LEFT JOIN article_comments AS c ON a.article_id = c.article_id
GROUP BY a.article_id
ORDER BY comments DESC
LIMIT 15
  

ДЕМОНСТРАЦИЯ

Для получения дополнительной информации прочитайте Расширения MySQL для ГРУППИРОВКИ ПО