请教一个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