0

次の 3 つのテーブルがあります。

  1. 投稿
  2. 投稿_返信
  3. 好き

このクエリは投稿を返し、その返信はすべて問題なくカウントされます。SELECT posts.title、posts.num、posts.status、posts.category、posts.content、posts.member_num、COUNT( posts_replies.blyrb_num) AS count

FROM posts_replies
INNER JOIN posts ON ( posts_replies.blyrb_num = posts.num )
WHERE posts.status =1
AND posts.access = 'Public'
GROUP BY posts.num
ORDER BY count DESC
LIMIT 50 

このクエリが返すレコードは次のとおりです: 47

そして、これは少し更新されたクエリで、投稿に対する各返信のいいね数を取得したいと考えていました。

SELECT posts.title, posts.num, posts.status, posts.category, posts.content, posts.member_num, 
COUNT( posts_replies.blyrb_num ) AS count,
COUNT( likes.comment_num  ) AS likes_count
FROM posts_replies
INNER JOIN posts ON ( posts_replies.blyrb_num = posts.num )
INNER JOIN likes ON ( likes.comment_num = posts_replies.num )
WHERE posts.status =1
AND posts.access = 'Public'
GROUP BY posts.num
ORDER BY count DESC
LIMIT 50 

このクエリは Likes Count を正常に返していますが、Likes のないレコードは含まれていません。したがって、このクエリが返すレコードは次のとおりです: 40

いいねが0件であっても、各返信のいいね数を含めたいです。

何か助けはありますか?

ありがとうございました

4

1 に答える 1

1

LEFT JOINの代わりに使用すると、INNER JOINここで役立つ場合があります

SELECT posts.title, posts.num, posts.status, posts.category,
posts.content,posts.member_num, 
COUNT( posts_replies.blyrb_num ) AS count,
COUNT( likes.comment_num  ) AS likes_count
FROM posts_replies
INNER JOIN posts ON ( posts_replies.blyrb_num = posts.num )
LEFT JOIN likes ON ( likes.comment_num = posts_replies.num )
WHERE posts.status = 1
AND posts.access = 'Public'
GROUP BY posts.num
ORDER BY count DESC
LIMIT 50 

の考え方はLEFT JOIN、右側に一致する行がない場合でも行を一致させることです。INNER JOIN両側に行がある場合にのみ機能します。:)

于 2013-02-24T17:42:11.563 に答える