首页 > 一个sql查询问题

一个sql查询问题

我想通过文章的评论量来排序查询出评论量前5的文章出来,有两张表,文章表和
评论表,之前用的是内连接,得到的都是的公共部分,所以筛选出来的结果必须是有评论量,如果评论量为0,则什么都查询不出来,我要的不是这样的结果,我的需求是就算评论量为0要可以参与排序,网上查了一下,应该要用全连接,但是目前报错,同时做了个测试,似乎所有的全连接都会报错
下面的代码用的是thinkphp
$hotArticle = $articleModel->join('sys_comment on sys_comment.article_id=sys_article.article_id','FULL')->field('sys_article.,count() as num')->group('sys_article.article_id')->order('count(*) desc')->limit(5)->select();


不懂php,仅从SQL角度回答。

SELECT a.article_id, count(b.article_id) AS num FROM sys_article AS a
LEFT JOIN sys_comment AS b ON a.article_id = b.article_id
GROUP BY a.article_id
ORDER BY num
LIMIT 5

这是基于文章来排名的。所以应该是用文章表作为基表,用外连接得出结果。


不需要全连接,也就是comments没有对应article的算垃圾数据,用外联接就行,如果可以是sys_article left join sys_comment也可以写成sys_comment right join sys_article
也就是以sys_article为主表

所以你将Full 改为Left试试

【热门文章】
【热门文章】