Это в 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 в качестве CategoryName, сумма (v.value) в качестве VoteSum - получить имя категории и сумму голосов
из категорий c элементами внутреннего соединения i - присоединить иерархию: категории к элементам
on c.category_id = i.category_id - on category_id
голосование за внутреннее объединение v - элементы для голосования
on i.item_id = v.item_id - on item_id
где create_at между dateadd (week, -1, getdate ()) и getdate () - указать диапазон дат для включения
группировать по c.name - группировать результаты по категориям
упорядочить по сумме (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 ')