gpt4 book ai didi

mysql - 检查表的时间重叠?

转载 作者:行者123 更新时间:2023-11-29 16:06:51 25 4
gpt4 key购买 nike

我有一个包含以下字段的 MySQL 表:

  • 姓名
  • 开始时间
  • 结束时间

starttimeendtime 是 MySQL TIME 字段(不是 DATETIME)。我需要一种方法来定期“扫描”表以查看表内的时间范围是否有重叠。如果 10:00-11:00 有一个事件,10:30-11:30 有另一个事件,我希望收到有关时间重叠存在的提醒.

没什么特别的,我只是想知道是否存在重叠。

我将使用 PHP 来执行此操作。

最佳答案

这是一个查询模式,我多年前就找到了答案:

SELECT *
FROM mytable a
JOIN mytable b on a.starttime <= b.endtime
and a.endtime >= b.starttime
and a.name != b.name; -- ideally, this would compare a "key" column, eg id

要找到“任何重叠”,您可以将时间范围的相反两端进行比较。我必须拿出笔和纸并绘制相邻范围才能意识到边缘情况归结为这种比较。

<小时/>

如果您想防止任何行重叠,请将此查询的变体放入触发器中:

create trigger mytable_no_overlap
before insert on mytable
for each row
begin
if exists (select * from mytable
where starttime <= new.endtime
and endtime >= new.starttime) then
signal sqlstate '45000' SET MESSAGE_TEXT = 'Overlaps with existing data';
end if;
end;

关于mysql - 检查表的时间重叠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55663922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com