我有一些关于 MySQL 的报告,下面的代码是我目前对该问题的解决方案。
直到我开始考虑员工轮班时间超过午夜时,这似乎很简单,因此必须调整查询。现在我有 php 根据日期/时间跨度生成不同的查询,如下所示:
如果工作班次在同一天(即:两天的上午 8 点至晚上 8 点):
SELECT <select statements>
FROM <from statements>
WHERE
(
(Date = '2012-04-16' AND Time BETWEEN '08:00:00' AND '20:00:00')
OR
(Date = '2012-04-02' AND Time BETWEEN '08:00:00' AND '20:00:00')
);
如果轮班超过午夜,它会变得复杂(即:两天的晚上 8 点到早上 8 点):
SELECT <select statements>
FROM <from statements>
WHERE
(
(
(Date = '2012-04-16' AND Time >= '20:00:00')
OR
(Date = '2012-04-17' AND Time <= '08:00:00')
)
OR
(
(Date = '2012-04-17' AND Time >= '20:00:00')
OR
(Date = '2012-04-18' AND Time <= '08:00:00')
)
);
可以想象,这些查询在我添加到报告中的每一天都变得非常冗长和繁重。必须有一种更聪明的方法来做到这一点 - 任何人都可以提供任何见解吗?