检查 MYSQL 表行中是不是存在特定时间范围

Posted

技术标签:

【中文标题】检查 MYSQL 表行中是不是存在特定时间范围【英文标题】:Check Specific Time range exists inside the MYSQL table rows检查 MYSQL 表行中是否存在特定时间范围 【发布时间】:2020-07-16 12:52:10 【问题描述】:

我有一张表,其中包含各种事件的开始和结束日期时间。在图片中,您可以看到为事件定义了不同的日期范围作为事件的开始时间和结束时间。

现在,当用户要添加新事件时,我需要根据现有记录检查时间。我在查询之间尝试过,但它没有给我正确的结果。

Start                  END
2020-07-20 14:15      2020-07-20 15:00   - Not allowed(record #1)
2020-07-20 10:30      2020-07-20 11:00   - Not allowed (record #3)
2020-07-20 11:00      2020-07-20 12:00   - Not allowed(record #3)
2020-07-20 13:00      2020-07-20 14:00   - Allowed

如何根据 mysql 中的上述所有条件获得至少重复(不允许)记录的数量?

【问题讨论】:

【参考方案1】:

您希望确保新插入的行不会与现有间隔重叠。一种选择是not exists

insert into mytable (start, end)
select v.*
from (select '2020-07-20 14:15' start, '2020-07-20 15:00' end) v
where not exists (
    select 1
    from mytable t
    where t.start <= v.end and t.end >= v.start
)

【讨论】:

以上是关于检查 MYSQL 表行中是不是存在特定时间范围的主要内容,如果未能解决你的问题,请参考以下文章

根据 URL 参数重定向,如果 URL 参数在表行中可用 - PHP MySQL

选择没有特定类的表行

将按钮的名称和值存储在 mysql 表行中

在没有特定类的行中查找单选按钮

如何检查在mysql中存储多个值的变量中是不是存在特定值?

rails 范围检查关联是不是不存在