Я новичок в программировании и базах данных, и я был бы благодарен за некоторую помощь по следующему сценарию.
Я использую PHP с SQL Server. Я строю систему посещаемости сотрудников и хотел бы создать (сводную) таблицу с месяцами в виде строк и именами всех дней недели в виде столбцов (для определенного года). Значения в ячейках будут номер дня (1, 2, 3 ... 31).
Цвет фона ячейки (уже существует в виде столбца таблицы) объявляет тип отпуска сотрудников. Таблица содержит следующие столбцы: employee_id, leave_date, leave_type, leave_type_color
.
Я хочу добиться результата, как показано ниже:
Спасибо.
sql-server
php
pivot
Майк Т
источник
источник
Ответы:
Самая сложная часть этого - просто создание календаря в этом формате. Поворачивать и окружать его HTML довольно легко. Во-первых, давайте начнем с этой таблицы сотрудников с датами отпуска.
leave_type
не похоже на актуальную проблему.Процедура, которую я придумал, выглядит следующим образом (и предупреждение: оно предполагает
@@DATEFIRST = 7
):Результаты этого звонка:
Похоже на это (я остановился на 7-й день колонки):
Вам придется добавить
<table>
/</table>
wrapper самостоятельно, но вот как выглядит вывод, когда он помещается между ними и сохраняется в виде HTML (и, конечно, вы можете еще больше улучшить его с помощью CSS):Когда отпуск выпадает на выходные, цвет выхода превосходит цвет выходного, но это легко отрегулировать. Изменить это:
К этому:
Чтобы преобразовать цвет в десятичном формате (например
65280
) в его эквивалент RGB (00FF00
), вы должны выполнить кучу манипуляций. Во-первых, я хотел бы сохранить его как RGB-гекс, но я обновил здесь решение с помощью чего-то похожего на это:источник
leave_type_color
столбец числовым?Начните с рассмотрения того, что вы хотите иметь в качестве столбцов, и это в основном «неделя 1 день 1 (воскресенье)», «неделя 1 день 2 (понедельник)», вплоть до «неделя 6 день 7 (сб)». По сути, день 1-42. 1 января - это «Неделя 1, день 2» января. Я назову этот WeekPlusDay сейчас.
Чтобы понять, где начинается каждый, просто рассмотрите часть дня недели.
Ваш набор данных должен просто включать это значение «WeekPlusDay», и вы отображаете DayOfMonth.
источник