Как получить количество комментариев, даже если количество комментариев равно 0 - PullRequest
0 голосов
/ 08 мая 2018

У меня есть сообщения в таблицах и комментарии к таблицам. Комментарий подал «post_id», который ссылается на «id» сообщения. Я хочу получить количество комментариев для каждого сообщения. Я использую этот запрос:

SELECT COUNT(id) as count 
FROM comments 
WHERE post_id IN (1, 2, 3, 4, 5) 
GROUP BY id HAVING count >= 0 ORDER BY created_at DESC, id DESC

Но он возвращает только количество> 0, но мне нужно получить количество комментариев, которое также равно 0.

Ответы [ 4 ]

0 голосов
/ 08 мая 2018

Используйте этот запрос:

select p.post_id, count(c.id) as total_comments
from posts p LEFT JOIN comments c
on p.post_id = c.id
group by p.post_id
order by p.post_id desc;

Иллюстрация:

select * from posts;
+----------+---------+
| postdesc | post_id |
+----------+---------+
| post-1   |       1 |
| post-2   |       2 |
| post-3   |       3 |
+----------+---------+

select * from comments;
+--------------+------+------------+
| comment_desc | id   | created_at |
+--------------+------+------------+
| comment-1    |    1 | 2018-04-01 |
| comment-2    |    1 | 2018-04-02 |
| comment-3    |    2 | 2018-04-03 |
| comment-4    |    1 | 2018-04-04 |
+--------------+------+------------+

--query
+---------+----------------+
| post_id | total_comments |
+---------+----------------+
|       3 |              0 |
|       2 |              1 |
|       1 |              3 |
+---------+----------------+

Обновление : эта версия не использует синтаксис JOIN. Дает тот же результат, что и выше.

select a.post_id, a.total_comments 
from
(
    select post_id, 0 as total_comments
    from posts
    where post_id not in 
        (
            select distinct id 
            from comments
        )
    union
    select id, count(*)
    from comments
    group by id
) a
order by a.post_id desc;
0 голосов
/ 08 мая 2018

Having не поможет в этом случае. Похоже, у вас нет комментариев к некоторым сообщениям. Таким образом, вы не выберете ни одной записи для этого поста из таблицы комментариев. Вам нужно что-то вроде этого:

select p.id, count(c.id)
from posts p 
left join comments c on p.id = c.post_id
where p.id in (1, 2, 3, 4, 5) 
GROUP BY p.id
ORDER BY p.id DESC
0 голосов
/ 08 мая 2018

Потому что это ноль

Проверьте это

SELECT COUNT(post_id) AS 'count'
FROM posts LEFT JOIN comments on post.id = comments.post_id
WHERE post.id IN (1, 2, 3, 4, 5) 
GROUP BY post_id ORDER BY count DESC, created_at DESC

Вам нужно получать сообщения из таблицы posts, некоторые сообщения не имеют комментариев, поэтому post_id не существует в comments

0 голосов
/ 08 мая 2018

Попробуйте это:

SELECT post_id, COUNT(post_id)
FROM comment
WHERE post_id IN (1, 2, 3, 4, 5)
GROUP BY post_id
HAVING COUNT(post_id) >= 0 
ORDER BY created_at DESC, post_id DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...