0

これまでの私のクエリは次のとおりです。

SELECT
posts.title
, SUM(CASE comments.status WHEN 'approved' THEN 1 END) AS commentsCount
FROM posts
INNER JOIN コメント
ON comments.postID = posts.id
WHERE
posts.status = ?
GROUP BY
posts.title
ORDER BY
commentsCount DESC
LIMIT 5

comment.flagged取得したときに = 0であることも確認する必要がありますcommentsCountCASE呼び出し内に sを追加しようとSUM()しましたが、致命的なエラーが発生しました。どうすればこれを達成できますか?

ありがとう!

4

3 に答える 3

1
SELECT
posts.title
, SUM(IF ((comments.status='approved' AND  comments.flagged = 0),1,0)) AS commentsCount
FROM posts
INNER JOIN comments
ON comments.postID = posts.id
WHERE
posts.status = ?
GROUP BY
posts.title
ORDER BY
commentsCount DESC
LIMIT 5
于 2009-09-08T17:23:45.390 に答える
1

あなたが本当にやろうとしているのはこれのようです:

SELECT
posts.title
, COUNT(*) AS commentsCount
FROM posts
INNER JOIN comments
ON comments.postID = posts.id
AND comments.status = 'approved'
AND comments.flagged = 0
WHERE
posts.status = ?
GROUP BY
posts.title
ORDER BY
commentsCount DESC
LIMIT 5

誰が であるかのみに関心がcommentsあるstatusため'approved'、条件は結合条件にする必要があります。

編集:とstatusがに等しいコメントをカウントしたいと仮定して、クエリを更新しました。'approved'flagged0

于 2009-09-08T17:34:13.450 に答える
0

Josh DavisのSQLに基づいて、私にとってうまくいったのは次のとおりです。

SELECT
posts.title
, posts.slug
, COUNT(comments.id) AS commentsCount
FROM posts
INNER JOIN コメント
ON comments.postID = posts.id
AND comments.status = 'approved'
AND comments.flaged = 0
WHERE
posts.status = ?
GROUP BY
posts.title
ORDER BY
commentsCount DESC
LIMIT 5

于 2009-09-08T17:45:19.543 に答える