У меня два пользователя таблицы, а login_table
Таблица пользователей
id Name status
----------------------
1 Johan 1
2 Smith 1
. . . .
----------------------
Вход в систему
id user_id login_date hours
-------------------------------------
1 1 2017-01-01 8
2 1 2017-01-02 7
3 2 2017-01-03 12
4 2 2017-01-02 10
. . . .
-------------------------------------
В любом случае мы можем получить данные, как показано ниже?
index user_id name Jan Feb Mar .... Dec Total
---------------------------------------------------------
1 1 Johan 100 120 115 .... 120 455
1 2 Smith 100 110 120 .... 110 440
. . . . . . . .
---------------------------------------------------------
Мы уже сделали это с помощью PHP/MYSQL, но у вас много времени для обработки и выполнения. В любом случае мы можем напрямую извлечь это из MySQL?
Я не знаю, какой index
, но остальное - объединение, group by
и условная агрегация:
select u.id, u.name,
sum(case when month(l.login_date) = 1 then hours else 0 end) as jan,
sum(case when month(l.login_date) = 2 then hours else 0 end) as feb,
. . .,
sum(hours)
from users u join
login l
on u.id = l.login_id
where l.login_date >= '2017-01-01' and l.login_date < '2018-01-01'
group by u.id, u.name;
Заметки:
>=
и <
по назначению. Это предпочтительнее, потому что MySQL может использовать индекс для данных.index
. Возможно, вы имеете в виду status
?