#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 для ГРУППИРОВКИ ПО