有一次有个项目中编写一个简单的发帖功能,需要涉及到多表链接查询,为了提升性能,一次性全部查询出来。
其中有三个表需要查询。三个表都是通过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
查询结果是在article帖子列表所有字段的后面,增加了三个字段,结果如下
第一个字段为:点赞数有多少条。
第二个字段为:回复数有多少条。
第三个字段为:本用户是否已经点过赞了。