【问题标题】:Update mysql one table from another table based on dates根据日期从另一个表更新mysql一个表
【发布时间】:2013-07-12 13:34:15
【问题描述】:

我有一个学生考勤系统程序,并记录保存在 mysql 表中,如下所示,如果存在则为 1,如果不存在则为 0

表 -> 出勤率

uid  date       status  App
1   01/07/2013  1   
1   01/07/2013  1   
1   01/07/2013  1   
1   01/07/2013  0   
1   01/07/2013  0   
1   02/07/2013  1   
1   02/07/2013  0   
1   02/07/2013  1   
1   02/07/2013  1   
1   02/07/2013  1   
1   03/07/2013  0   
1   03/07/2013  0   
1   03/07/2013  1   
1   03/07/2013  1   
1   03/07/2013  1   
1   04/07/2013  0   
1   04/07/2013  1   
1   04/07/2013  1   
1   04/07/2013  1   
1   04/07/2013  1   

我还有一张表格,学生可以在其中提交他们的休假申请,如下所示

表格 -> 应用程序

 id  uid    from            to           status
 1   1    04/07/2013    07/07/2013  approved
 2   1    11/07/2013    12/07/2013  rejected

我希望如果状态设置为已批准,那么将在“出勤”表中搜索申请中给出的从 7 月 4 日到 7 月 7 日的日期范围,无论找到状态为 0 的日期,它都会在“应用程序”中添加 1列并忽略未出席的日期。

【问题讨论】:

  • 你的问题是什么?
  • 如果 status 为 0,您可能希望将 status 设置为 2,这样您就可以撤消申请并仍然保留任何正常出勤。即0-off、1-in、2-hol
  • 您的日期使用date 数据类型存储,对吧?

标签: php mysql sql-update


【解决方案1】:
UPDATE attendance  d
  JOIN application p
    ON d.uid = p.uid
   AND d.date BETWEEN p.from AND p.to
   AND p.status = 'approved'
SET    d.app = 1
WHERE  d.status = 0

【讨论】:

    【解决方案2】:
    UPDATE attendance  d
      JOIN application p
        ON d.uid = p.uid
       AND d.date BETWEEN p.from AND p.to
    SET    d.status = 1
    WHERE  p.status = 'approved'
    

    【讨论】:

    • 应该是 D.App 而不是 d.status 以及 d.status = 0 的 where 子句
    【解决方案3】:

    这应该做你想做的:

    UPDATE attendance a
        Set a.app=1
        WHERE a.uid IN
            (select z.uid
                FROM application z
                WHERE z.status='approved'
                    AND a.date BETWEEN z.from and z.to);
    

    【讨论】:

    猜你喜欢
    • 2012-09-05
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    相关资源
    最近更新 更多