这是在 SQL Server 中...但对于我认为的 MySQL 人来说很容易转换!
select top 5
c.name as CategoryName, sum(v.value) as VoteSum
from categories c inner join items i
on c.category_id = i.category_id
inner join votes v
on i.item_id = v.item_id
where created_at between dateadd(week,-1,getdate()) and getdate()
group by c.name
order by sum(v.value) desc
选择前 5 个--计算中显示的类别数
c.name as CategoryName, sum(v.value) as VoteSum --获取categoryname和投票总和
from categories c inner join items i --join the heirarchy: categories to items
关于 c.category_id = i.category_id --关于 category_id
inner join votes v --要投票的项目
关于 i.item_id = v.item_id --关于 item_id
dateadd(week,-1,getdate()) 和 getdate() 之间的 created_at --指定要包含的日期范围
按c.name分组--按类别分组结果
order by sum(v.value) desc --按求和值排序
这里有一些 sql(来自 SQL Server)来启动和运行表:
CREATE TABLE [categories](
[category_id] [int] IDENTITY(1,1) NOT NULL,
[name] [varchar](50) NOT NULL
)
CREATE TABLE [items](
[item_id] [int] IDENTITY(1,1) NOT NULL,
[category_id] [int] NOT NULL,
[name] [varchar](50)
)
CREATE TABLE [dbo].[votes](
[vote_id] [int] IDENTITY(1,1) NOT NULL,
[value] [int] NOT NULL,
[item_id] [int] NOT NULL,
[created_at] [datetime] NOT NULL
)
insert into categories (name) values (' asp.net ')
insert into categories (name) values (' c# ')
insert into categories (name) values (' vb ')
insert into categories (name) values (' sql ')
insert into categories (name) values (' html ')
insert into categories (name) values (' javascript ')
insert into items (category_id, name) values ( 1 ,' session handling ')
insert into items (category_id, name) values ( 1 ,' mvc vs mvp ')
insert into items (category_id, name) values ( 1 ,' code behind or no code behind ')
insert into items (category_id, name) values ( 2 ,' LINQ? ')
insert into items (category_id, name) values ( 2 ,' lamdas ')
insert into items (category_id, name) values ( 2 ,' multi-threaded code ')
insert into items (category_id, name) values ( 2 ,' SOLID principles ')
insert into items (category_id, name) values ( 3 ,' vb vs C# ')
insert into items (category_id, name) values ( 3 ,' VB.NET over vb6 ')
insert into items (category_id, name) values ( 4 ,' CLR procedures or stored procedures ')
insert into items (category_id, name) values ( 4 ,' ORMs vs stored procedures and views ')
insert into items (category_id, name) values ( 6 ,' jquery instead of standard DOM ')
insert into votes (value, item_id, created_at) values ( -1 , 1 ,' 6/26/2009 18:59 ')
insert into votes (value, item_id, created_at) values ( 1 , 1 ,' 6/26/2009 18:59 ')
insert into votes (value, item_id, created_at) values ( 3 , 1 ,' 6/26/2009 18:59 ')
insert into votes (value, item_id, created_at) values ( 3 , 1 ,' 6/26/2009 18:59 ')
insert into votes (value, item_id, created_at) values ( 2 , 2 ,' 6/26/2009 18:59 ')
insert into votes (value, item_id, created_at) values ( 2 , 2 ,' 6/26/2009 18:59 ')
insert into votes (value, item_id, created_at) values ( 4 , 2 ,' 6/26/2009 18:59 ')
insert into votes (value, item_id, created_at) values ( -3 , 2 ,' 6/26/2009 18:59 ')
insert into votes (value, item_id, created_at) values ( 2 , 4 ,' 6/26/2009 19:00 ')
insert into votes (value, item_id, created_at) values ( 6 , 4 ,' 6/26/2009 19:00 ')
insert into votes (value, item_id, created_at) values ( 3 , 4 ,' 6/26/2009 19:00 ')
insert into votes (value, item_id, created_at) values ( 5 , 4 ,' 6/26/2009 19:00 ')
insert into votes (value, item_id, created_at) values ( 8 , 7 ,' 6/26/2009 19:00 ')
insert into votes (value, item_id, created_at) values ( 3 , 6 ,' 6/26/2009 19:00 ')
insert into votes (value, item_id, created_at) values ( 8 , 7 ,' 6/26/2009 19:01 ')
insert into votes (value, item_id, created_at) values ( 2 , 5 ,' 6/26/2009 19:01 ')