2013-02-24 139 views
0

有这三个表:SQL查询INNER JOIN三个用表

  1. 帖子
  2. posts_replies
  3. 喜欢

该查询返回我的帖子及其回复数无一不精。 SELECT posts.title,posts.num,posts.status,posts.category,posts.content,posts.member_num,COUNT(posts_replies.blyrb_num)AS计数

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 

此查询返回的是喜欢的数量好,但不包括那些没有喜欢的记录。 因此,此查询返回的记录是:40

我想包括每个回复的Like Count,即使它有0个喜欢。

任何帮助?

谢谢

+1

左连接不内连接。如果你想要它是否匹配 – 2013-02-24 17:41:12

+1

如果你想从没有匹配的表中得到行,你需要一个左连接或右连接,这取决于你想从哪里返回空记录。 – steoleary 2013-02-24 17:42:01

+0

谢谢@Tony-Hopkinson和steoleary,你们是对的。 – 2013-02-24 17:52:19

回答

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只适用于双方都有行的情况。 :)

+0

哇这工作就像一个巧克力,谢谢你的人! :d – 2013-02-24 17:43:09