Я пытаюсь составить календарь рабочих смен, в котором сотрудник может работать 30 часов в одну неделю и 40 часов в другую.
У каждого сотрудника может быть несколько разных недель, каждая из которых может иметь разные рабочие дни и часы.
Если у сотрудника, например, будет 2 разные рабочие недели, в календаре это должно выглядеть примерно так:
1 | 01-01-2015 | week1 | employee1
2 | 01-02-2015 | week1 | employee1
3 | 01-03-2015 | week1 | employee1
4 | 01-04-2015 | week1 | employee1
5 | 01-05-2015 | week1 | employee1
6 | 01-08-2015 | week2 | employee1
7 | 01-09-2015 | week2 | employee1
8 | 01-10-2015 | week2 | employee1
Как мне заполнить таблицу календаря диапазоном дат, добавляя другой week_id каждые 7 дней в соответствии с данными из другой таблицы?
**Calendar table columns:**
- id
- date
- week_id
- employee_id
**Employee table columns:**
- id
- day_id
- employee_id
- week_id
- work_hours_from
- work_hours_to
Пример данных таблицы сотрудников:
Я пробовал следующее, что близко, но все даты совпадают, что приводит к бесконечному циклу:
DROP PROCEDURE IF EXISTS filldates;
CREATE PROCEDURE filldates(dateStart DATE, dateEnd DATE)
BEGIN
WHILE dateStart <= dateEnd DO
INSERT INTO prefix_calendar (date,week_id,employee_id)
SELECT date_add(dateStart, INTERVAL 1 DAY),week_id,employee_id FROM prefix_employee_hours WHERE employee_id = 5;
END WHILE;
END;
CALL filldates('2011-05-01','2011-05-05');