求一个高效的mysql查询语句

Augus6 2013-12-02 03:04:52
数据库表信息:
表名:
news(新闻)
涉及到的列:
1.id(不解释)
2.channel_id(外键,这条新闻所属的频道的id)
3.init_date(这条新闻的创建时间)
4.其他无关列

关键点:
channel_id这一列是有业务逻辑含义的。它从右向左每两位表示一级,大的一级是小的一级的父频道。看例子你就明白了:
1,00,00,00 表示体育频道
1,01,00,00 表示体育频道下的篮球频道
1,01,01,00 表示体育频道下的篮球频道下的NBA频道

2,00,00,00 表示汽车频道
2,01,00,00 表示汽车频道下的国产车频道
2,01,01,00 表示汽车频道下的国产车频道下的小轿车频道
2,01,01,01 表示汽车频道下的国产车频道下的小轿车频道下的xxx品牌车频道
以此类推......

需求:分别按月、按日统计每一个最高级频道下的新闻数量,子频道下的新闻算在其最高级父频道下。例如,按月统计的时候,给定时间是2013年,需要得到的数据是
2013年1月1,00,00,00及其各级子频道下的新闻数量
2013年2月1,00,00,00及其各级子频道下的新闻数量
2013年3月1,00,00,00及其各级子频道下的新闻数量
.....
2013年12月1,00,00,00及其各级子频道下的新闻数量

2013年1月2,00,00,00及其各级子频道下的新闻数量
2013年2月2,00,00,00及其各级子频道下的新闻数量
2013年3月2,00,00,00及其各级子频道下的新闻数量
......
2013年12月2,00,00,00及其各级子频道下的新闻数量

以及所以一级频道下1~12月份的新闻数量

按日统计的时候类似。
使用mysql数据库。
等待各位的高招了。。。。。。。。。。。。
...全文
283 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhcosin 2013-12-09
  • 打赏
  • 举报
回复
既然你一个字段内部各部分有此需求,建议将频道字段拆分为一张频道表,并作父频道外键。

8,028

社区成员

发帖
与我相关
我的任务
社区描述
高性能数据库开发
社区管理员
  • 高性能数据库开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧