Опитвам се да направя календар на работни смени, при който служител може да работи 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');