这是在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 --获取类别名称和投票总数
从categories c内部连接items i--连接层次结构:类别到项目
on c.category_id = i.category_id --按category_id
内部连接votes v--项目到投票
on i.item_id = v.item_id --按item_id
where created_at between dateadd(week,-1,getdate()) and getdate() --指定要包括的日期范围
group by 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 ')