Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果可能,如何在mysql查询中重写值_Mysql - Fatal编程技术网

如果可能,如何在mysql查询中重写值

如果可能,如何在mysql查询中重写值,mysql,Mysql,我尝试将员工的工作时间存储在mysql表中。在表working_hour中,我存储了正常工作时间: id employee weekDay start end 1 1 2 10:00:00 18:00:00 2 1 3 10:00:00 18:00:00 3 1 4 10:00:00 14:00:00 4 1 5 10:00:00 12:00:00 5

我尝试将员工的工作时间存储在mysql表中。在表
working_hour
中,我存储了正常工作时间:

id employee weekDay    start     end 
1     1       2      10:00:00  18:00:00
2     1       3      10:00:00  18:00:00
3     1       4      10:00:00  14:00:00
4     1       5      10:00:00  12:00:00
5     1       6      10:00:00  18:00:00
6     1       7      00:00:00  00:00:00
7     1       1      00:00:00  00:00:00
在第二张表中,我存储“特殊”工作时间。在那里,我储存疾病、假期或某一天的定制工作时间等信息。
working\u hour\u special
l表如下所示:

id           start                   end            type
2     12013-03-12 00:00:00  2013-03-13 23:59:59      ill
这就是我尝试过的:

SELECT 
    IFNULL(working_hour_special.start, working_hour.start) AS startTime,
    IFNULL(working_hour_special.end, working_hour.end) AS endTime,
    type
FROM 
    working_hour_special LEFT JOIN
    working_hour ON working_hour.employee_id = working_hour_special.employee_id
WHERE 
    working_hour_special.start = DATE('2013-03-13') AND 
    employee_id = 1 AND
    working_hour.weekDay = DAYOFWEEK('2013-03-13')

问题是WHERE子句。我需要特定员工特定日期的开始和结束时间。有人知道怎么做吗?

首先,桌子的设计似乎很糟糕。一周中只有一天,而另一周中有完整的日期/时间戳。1月1日的第1周与7月26日的第1周没有区别

其次,当您有一个左连接,然后将该表抛出到WHERE子句中(不考虑NULL测试),它基本上会创建一个正常的内部连接

因此,您可能要寻找的是将与特殊关联的WHERE组件转移到条件的连接部分。。。差不多

SELECT 
      IFNULL(working_hour_special.start, working_hour.start) AS startTime,
      IFNULL(working_hour_special.end, working_hour.end) AS endTime,
      type
   FROM 
      working_hour_special 
         LEFT JOIN working_hour 
            ON working_hour.employee_id = working_hour_special.employee_id
           AND working_hour_special.start = DATE('2013-03-13')
   WHERE 
          employee_id = 1 
      AND working_hour.weekDay = DAYOFWEEK('2013-03-13')

你到底想要实现什么?有什么问题吗?如何将日期从
特别工作时间
匹配到
工作时间
?@Obl Tobl:我尝试获取特定员工的工作时间。如果没有“特殊”,比如疾病或假期,我需要正常的工作时间来约会。哪种桌子设计更好?我需要存储正常工作时间,还需要存储疾病或假期等其他信息。@ThomasSchiela,我会将所有信息都放在一个列中,并显示状态,例如,表示正常时间、随时间变化、疾病、假期等等。此外,还有完整的日期/时间与星期几。您始终可以从日期开始计算星期几。那么查询是从一个表中进行的还是不进行的。将所有信息存储在一个表中是我的第一个想法。但我认为我有很多员工的记录(~1000),因为我需要未来2-3个月的信息。对于两个表,我只存储“标准”周和一些额外的“特殊”日。@ThomasSchiela、SQL(MySQL和其他)如果设计得好,并且有适当的索引来匹配查询上下文,其中子句没有问题,即使有数百万条记录。所以,真的要把事情分开,弄得一团糟,或者让引擎更好地为你处理。