SQL 多个表链接JOIN统计条目查询

有一次有个项目中编写一个简单的发帖功能,需要涉及到多表链接查询,为了提升性能,一次性全部查询出来。

其中有三个表需要查询。三个表都是通过ID来关联的

第一个表的数据为帖子信息表,需要全部查询出来

cms_bbs_article


第二个表为帖子点赞信息表,必须把相关联的ID有多少条目,计算出来

cms_bbs_thumbup



第三个表是帖子回复信息表,要把回复了多少条数目,也就是相关联的ID有多少条目,计算出来

cms_bbs_reply


SQL如下

SELECT
  t1.*,
  IF(LENGTH(cms_bbs_thumbup.f_user_id) > 0,1,0) AS bThumbUp
FROM
  (SELECT
    cms_bbs_article.article_id AS bbs_article_id,
    cms_bbs_article.node_id AS bbs_node_id,
    cms_bbs_article.article_title AS bbs_article_title,
    cms_bbs_article.article_content AS bbs_article_content,
    cms_bbs_article.article_time AS bbs_article_time,
    cms_bbs_article.article_top AS bbs_article_top,
    cms_bbs_article.f_user_id AS f_user_id,
    COUNT(cms_bbs_thumbup.article_id) AS thumbUpNum,
    COUNT(cms_bbs_reply.article_id) AS replyNum
  FROM
    cms_bbs_article
    LEFT JOIN cms_bbs_thumbup
      ON cms_bbs_thumbup.article_id = cms_bbs_article.article_id
    LEFT JOIN cms_bbs_reply
      ON cms_bbs_reply.article_id = cms_bbs_article.article_id
  GROUP BY cms_bbs_article.article_id) t1
  LEFT JOIN cms_bbs_thumbup
    ON cms_bbs_thumbup.article_id = t1.bbs_article_id
    AND cms_bbs_thumbup.f_user_id = 1
WHERE bbs_node_id = 1
ORDER BY bbs_article_time DESC


注:bbs_node_id = 1为帖子所做的版块ID是1,f_user_id = 1为当前用户ID,用来计算当前用户是否已经点过赞了。
查询结果是在article帖子列表所有字段的后面,增加了三个字段,结果如下


第一个字段为:点赞数有多少条。

第二个字段为:回复数有多少条。

第三个字段为:本用户是否已经点过赞了。


以上,记录一下备忘

发布了14 篇原创文章 · 获赞 7 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/wangmy1988/article/details/76598457
今日推荐