MySQL查找时隙冲突
我试图在sql数据库中查找时隙冲突。该表的一个示例是:MySQL查找时隙冲突,mysql,Mysql,我试图在sql数据库中查找时隙冲突。该表的一个示例是: id | startTime | endTime ---+-----------+--------- 1 | 09:00:00 | 10:00:00 2 | 10:00:00 | 10:20:00 我正在处理的语句是为了返回建议的一个将与多少插槽冲突,它是 SELECT COUNT(*) FROM Slots WHERE (endTime > #{start} AND endTime <= #{end}) OR (st
id | startTime | endTime
---+-----------+---------
1 | 09:00:00 | 10:00:00
2 | 10:00:00 | 10:20:00
我正在处理的语句是为了返回建议的一个将与多少插槽冲突,它是
SELECT COUNT(*) FROM Slots WHERE (endTime > #{start} AND endTime <= #{end}) OR (startTime >= #{start} AND startTime < #{end})
但这并没有考虑到现有时隙内的时隙,例如,如果我尝试在09:15到09:45之间预订一个时隙,系统将不会检测到与第一个时隙的冲突
另一个设计要求是,如果一个插槽在11:00结束,另一个插槽同时启动,则不会有任何冲突。试试看
SELECT COUNT(*) FROM Slots WHERE
(startTime > #{end} AND endTime > #{end})
OR
(startTime < #{start} AND endTime < #{start})
您所做的一切都是正确的,只有slite条件发生如下变化: 从endTime{end}所在的插槽中选择COUNT*
希望这对您有所帮助,祝您度过愉快的一天:-假设新插槽为start,end=s2,e2,将问题分解为更小/更简单的问题: 检查s2是否落在一个时隙内,即:
SELECT COUNT(*) FROM Slots WHERE (endTime > s2 AND startTime < s2)
检查e2时间是否在某个时间段内:
SELECT COUNT(*) FROM Slots WHERE (endTime > e2 AND startTime < e2)
以上两种情况绝对是冲突,并且会考虑时间部分重叠的所有情况。但是,它不会检查新插槽s2、e2是否环绕现有插槽,因此
查看现有插槽是否属于我们的新插槽:
SELECT COUNT(*) FROM Slots WHERE (endTime < e2 AND startTime > s2)
您可以使用OR将这三者组合在一个查询中,我认为它应该可以工作,而不是经过测试。平等性已被删除,以便同时完成和启动插槽
SELECT COUNT(*) FROM Slots WHERE
(endTime > #{start} AND startTime < #{start})
OR
(endTime > #{end} AND startTime < #{end})
OR
(endTime < #{end} AND startTime > #{start})
最简单的逻辑是:
SELECT COUNT(*)
FROM Slot
WHERE endTime > #{start} AND startTime < #{end}
我不确定正确的逻辑是>还是>=。逻辑很简单:当一个时间段在第二个时间段结束之前开始,而第一个时间段在第二个时间段开始之后结束时,两个时间段重叠