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帖子列表所有字段的后面,增加了三个字段,结果如下


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

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

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


以上,记录一下备忘

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值