【发布时间】:2015-11-21 09:52:54
【问题描述】:
这不是一个重复的问题,我在小提琴演示中的查询处理了数据库中的重叠日期。我所追求的是一种在将日期插入 MySQL 之前在日期范围 $startdate 和 $enddate 上运行查询的方法。基本上我想检查每个员工在那年的假期权利中是否有足够的假期。
我尝试在插入 MYSQL 之前检查日期范围内的每个日期在哪一年。每个员工每年从不同的一天开始
Eg. jon started on 2013-10-10 so his year is
2013-10-10 to 2014-10-10
2014-10-10 to 2015-10-10
目前,我的查询检查它们已插入 MYSQL (h.date) 的日期,e.startdate 从它们开始每年计算。在插入日期之前,我应该检查 $startdate、$enddate 之间的每个日期。
我已经设置了一个 Fiddle 演示,当日期已经在数据库中时它可以工作
$startdate ='2015-10-05';
$enddate ='2015-10-20';
SELECT
e.name AS Employee,
CONCAT(
CEIL(DATEDIFF(h.date, e.startdate)/365),
' (',
DATE_ADD(e.startdate, INTERVAL FLOOR(DATEDIFF(h.date, e.startdate)/365) YEAR), ' to ',
DATE_ADD(e.startdate, INTERVAL CEIL(DATEDIFF(h.date, e.startdate)/365) YEAR),
')'
) as Year,
COUNT(h.date) AS Holidays_Taken,
SUM(h.hours) AS Hours
FROM employees AS e
LEFT JOIN holidays_taken AS h ON e.id = h.empid
WHERE e.id = 1
GROUP BY Year
希望有人能帮忙谢谢
谢谢,我忘了提到员工每天工作的时间是不同的,所以我使用这个查询来插入假期每天的时间,例如。 jon (empId 1) 周一工作 10 小时,周二工作 6 小时,以此类推。
$sql= "select empId,
'".$holidayStart."' as date,
case dayname('".$holidayStart."')
when 'Sunday' then Sun
when 'Monday' then Mon
when 'Tuesday' then Tue
when 'Wednesday' then Wed
when 'Thursday' then Thu
when 'Friday' then Fri
when 'Saturday' then Sat
else 0 end as hours
from employees where empId = '".$employee."'" ;
$result = $mysqli->query($sql);
然后是数据库
id empid Mon Tue Wed Thu Fri Sat Sun
102 1 10 6 4 10 10 0 0
【问题讨论】:
标签: php mysql date-range