Может быть, любительский вопрос, но сейчас я не придумываю решение, и, возможно, у кого-то есть идея, где мои мысли ошибочны.
Мой план - вызвать хранимую процедуру mySQL. Эта процедура должна вернуть что-то вроде этого:
+---------------+---------------+---------------+---------------+---------------+
| Date | 100 | 101 | 102 | 103 |
+---------------+---------------+---------------+---------------+---------------+
| 2019-10-21 | 1 | 2 | 3 | 4 |
| 2019-10-20 | 0 | 2 | 3 | 4 |
| 2019-10-19 | 0 | 2 | 3 | 4 |
| 2019-10-18 | 1 | 2 | 3 | 4 |
| 2019-... | .. | .. | .. | .. |
+---------------+---------------+---------------+---------------+---------------+
"Основные данные" были сохранены в таблице "loggings", которая имеет столбцы id, code, creation_at. Вторая таблица «коды» содержит список всех доступных кодов с идентификаторами столбцов (<- код в журналах) и описанием. </p>
Теперь мой первый шаг заключался в том, чтобы создать хранимую процедуру, обрабатывающую все даты от минимальной до максимальнойсвидание. Выглядит так:
BEGIN
set @dateStart := (SELECT MIN(created_at) FROM loggings);
set @dateEnd := (SELECT MAX(created_at) FROM loggings);
set @d := 0;
SELECT DATE(ADDDATE(@dateStart, INTERVAL @d:=@d+1 DAY)) AS date,
IFNULL((
SELECT COUNT(*) FROM loggings AS m2
WHERE DATE(m2.created_at) = DATE(ADDDATE(@dateStart, INTERVAL @d DAY))
),0) AS total
FROM loggings AS m1
HAVING @d < DATEDIFF(@dateEnd, @dateStart);
END
Работает нормально, я получаю список результатов со всеми днями и общей суммой записей в день:
+---------------+---------------+
| date | total |
+---------------+---------------+
| 2019-10-21 | 1 |
| 2019-10-20 | 2 |
| 2019-10-19 | 3 |
| 2019-10-18 | 4 |
| 2019-... | .. |
+---------------+---------------+
Теперь, следующая часть, которую я не делаюВ настоящее время не совсем понятно, как я могу решить эту проблему: как я могу зациклить доступные идентификаторы «кодов» в набор столбцов для результата? Каким-то образом я должен построить цикл внутри / снаружи выбранных возвращающих динамических полей, но как?
Редактировать: Пример данных может быть:
+----------+----------+----------+----------------------+
| id | email | code | created_at |
+----------+----------+----------+----------------------+
| 1 | a@y.de | 100 | 2019-10-21 10:00:01 |
| 2 | b@y.de | 100 | 2019-10-21 10:00:02 |
| 3 | c@y.de | 101 | 2019-10-21 10:01:03 |
| 4 | d@y.de | 102 | 2019-10-21 11:01:03 |
| 5 | a@y.de | 100 | 2019-10-21 12:01:03 |
| 6 | b@y.de | 103 | 2019-10-21 15:01:03 |
| 7 | e@y.de | 106 | 2019-10-21 15:01:04 |
| 8 | f@y.de | 108 | 2019-10-21 16:01:03 |
| 9 | g@y.de | 109 | 2019-10-21 17:01:03 |
+----------+----------+----------+----------------------+
Таблица регистрирует различные события по их коду сметка времени создания и адрес электронной почты в качестве ключа для идентификации пользователя, запускает «событие».