【问题标题】:Insert mysql date range, add different value every 7 days (work-shift calendar)插入mysql日期范围,每7天添加不同的值(轮班日历)
【发布时间】:2016-04-01 01:11:01
【问题描述】:

我正在尝试制作一个轮班日历,其中员工可以在一周内工作 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

我如何用一系列日期填充日历表,根据另一个表中的数据每 7 天添加一个不同的 week_id?

**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

Employee 表示例数据:

我尝试了以下方法,结果很接近,但日期都是相同的日期,导致无限循环:

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');

【问题讨论】:

    标签: mysql date join calendar range


    【解决方案1】:

    我不知道循环中的逻辑是否正确,但如果你想终止它,你需要增加dateStart

    所以添加:

    set dateStart = date_add(dateStart, INTERVAL 1 DAY);
    

    就在END WHILE之前。

    【讨论】:

    • 感谢您的回答,我看到由于忘记设置 dateStart 间隔,它会一直循环,因为初始开始日期没有添加天数。你的解决方案让我更接近我需要的东西,除了现在它为每个 week_id 添加双日期(第 1 周为 7x 2011-05-01,第 2 周为 7x 2011-05-01),我试图得到这个:7x 2011-05-01 为第 1 周,7x 2011-05-02 为第 2 周,7x 2011-05-03 为第 1 周,7x 2011-05-04 为第 2 周等等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    相关资源
    最近更新 更多