В настоящее время я показываю еженедельный отчет только с 7 столбцами для заданного диапазона дат недели.
Диапазон дат строго вводится из средства выбора даты jQuery всего за неделю.
user 1 | 2 | 3 | 4 | 5 | 6 | 7
---------------------------------------------------------
132 0 | 0 | 0 | 1 | 1 | 0 | 1
133 0 | 1 | 1 | 1 | 0 | 0 | 0
134 1 | 1 | 1 | 0 | 1 | 0 | 0
135 1 | 0 | 1 | 1 | 0 | 0 | 0
Теперь я хочу ввести любой диапазон дат (а не только диапазон недель) и отобразить записи следующим образом:
user 2018-06-03 | 2018-06-04 | 2018-06-05 | 2018-06-06 | 2018-06-07 | 2018-06-08 | 2018-06-09 | 2018-06-10 | ...
---------------------------------------------------------------------------------------------------------------------------------------------
132 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 |
133 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 |
134 0 | 1 | 0 | 1 | 1 | 1 | 1 | 0 |
135 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
136 0 | 0 | 1 | 0 | 1 | 1 | 1 | 1 |
Чтобы в настоящее время отображать отчет за 7 дней в неделю, вот мой сценарий запроса:
SELECT userId as user,
SUM(CASE WHEN day = 1 THEN lunchStatus ELSE 0 END) '1',
SUM(CASE WHEN day = 2 THEN lunchStatus ELSE 0 END) '2',
SUM(CASE WHEN day = 3 THEN lunchStatus ELSE 0 END) '3',
SUM(CASE WHEN day = 4 THEN lunchStatus ELSE 0 END) '4',
SUM(CASE WHEN day = 5 THEN lunchStatus ELSE 0 END) '5',
SUM(CASE WHEN day = 6 THEN lunchStatus ELSE 0 END) '6',
SUM(CASE WHEN day = 7 THEN lunchStatus ELSE 0 END) '7'
FROM
(
SELECT userId, lunchStatus, DAYOFWEEK(issuedDateTime) as day
FROM `lunch_status`
WHERE DATE(issuedDateTime) BETWEEN '$week_start_date' AND '$week_end_date'
) as a
GROUP BY user
Как мне обновить свой запрос, чтобы получить то, что мне нужно.
Я как бы застрял здесь со всем диапазоном дат.
Любая помощь приветствуется. Спасибо.
Вам необходимо использовать динамический SQL (prepare / exec), если вы хотите иметь имена столбцов переменных.






См .: Почему я должен предоставлять MCVE для того, что мне кажется очень простым SQL-запросом?. Тем не менее, я почти наверняка справлюсь с такими вещами в коде приложения.