日期:2014-05-16  浏览次数:20654 次

请教一个mysql的分组查询问题?
一个论坛,有两个表

posts   这是用户发贴表
id,forum_id,title,content,postat

forum   这是版面表
id,name,man

现在要用一个查询来得到某一时段内的各版面发贴排名:

select   f.id,f.name,count(p.id)   as   posts_num  
from   posts   p   left   join   forum   f   on   p.forum_id=f.id
where   p.postat= '20070801 '
group   by   f.id  
order   by   posts_num   desc

这时得到结果:
id             name                   posts_num
1 谈天说地       34
3 衣食住行       31
2 互通有无       26
9 收藏天地       11
5 游山玩水       9

但问题目是,论坛里还有三个版块,但当日没有发贴,即在posts表中当日没有记录,则这个查询就没有将其包含进来.
我的需求是,按照上面的查询时,同时也能将没有贴子的版块[count(p.id)为0]也一并查询出来.


查了一些资料,将上面的left   join   改成right   join,left   outer   join,但都不管用!

哪位能够帮帮我?谢谢!


------解决方案--------------------
那你就先查forum表
select * from forum left join (select id,name,count(id) from posts) as t on forum.....
------解决方案--------------------
你可以用版块表做为主表进行左连接,这样就行了。
------解决方案--------------------
用union合并两个结果集,参考一下

select * from(select forum.id, forum.name,report.total from forum, report
where forum.id=report.id
order by total desc)as A
union all
select * from (select forum.id, forum.name,0 from forum
where forum.id not in(select id from report)
)as B