1. ホーム
  2. mysql

[解決済み] MySQLのクエリでIF条件付きでカウントする

2022-05-08 01:48:33

質問

2つのテーブルがあります。1つはニュース、もう1つはコメントで、ステータスが承認に設定されたコメントの数を取得したいのですが、どうすればいいですか?

SELECT
    ccc_news . *, 
    count(if(ccc_news_comments.id = 'approved', ccc_news_comments.id, 0)) AS comments
FROM
    ccc_news
    LEFT JOIN
        ccc_news_comments
    ON ccc_news_comments.news_id = ccc_news.news_id
WHERE
    `ccc_news`.`category` = 'news_layer2'
    AND `ccc_news`.`status` = 'Active'
GROUP BY
    ccc_news.news_id
ORDER BY
    ccc_news.set_order ASC
LIMIT 20 

しかし、このクエリの問題は、そのニュースに対応するコメントが存在するかどうかにかかわらず、コメント列に対して取得される最小値が1であることです。

何かお手伝いできることがあれば、ぜひお願いします。

解決方法は?

使用方法 sum() の代わりに count()

以下、試してみてください。

SELECT
    ccc_news . * , 
    SUM(if(ccc_news_comments.id = 'approved', 1, 0)) AS comments
FROM
    ccc_news
    LEFT JOIN
        ccc_news_comments
    ON
        ccc_news_comments.news_id = ccc_news.news_id
WHERE
    `ccc_news`.`category` = 'news_layer2'
    AND `ccc_news`.`status` = 'Active'
GROUP BY
    ccc_news.news_id
ORDER BY
    ccc_news.set_order ASC
LIMIT 20