mysql - SQL - 检查是否存在重叠的工作时间

标签 mysql sql

我有以下数据库架构(其中日值 0=mon,1=tue,2=wed 等等)

enter image description here

和下面的输入

{
    "day": 3,
    "start_time": "15:00",
    "end_time": "17:30"
},
{
    "day": 5
    "start_time": "08:00",
    "end_time": "12:00"
}

我想查找输入值是否包含数据库中的任何重叠记录。 (请注意,在我的例子中,给定的一天可以有多个开始时间和结束时间)

这是我尝试过的。

SELECT
    COUNT(id) AS total_count
FROM
    working_hour
WHERE (
    (day = 3 AND (start_time <= '15:00' AND end_time >= '17:30')) ||
    (day = 5 AND (start_time <= '08:00' AND end_time >= '12:00'))
) AND user_id = 1;

这返回我的总计数 0 而我期待 1 因为在 day = 3 我们有一个匹配的重叠记录,id 5

我哪里出错了?

谢谢。

最佳答案

我相信你想要的逻辑是:

SELECT COUNT(*) AS total_count
FROM working_hour
WHERE user_id = 1 AND
      ((day = 3 AND start_time <= '17:30' AND end_time >= '15:00') OR
       (day = 5 AND start_time <= '12:00' AND end_time >= '8:00')
      ) ;

关于mysql - SQL - 检查是否存在重叠的工作时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55555712/

相关文章:

php - Laravel Eloquent hasManyThrough 关系 + 分页

mysql - 删除超过半小时或 1800 秒的 MySql 记录?

mysql - 不安全的列名

mysql - 使用 coalesce 和 join 计算一列与多行之间的差异

mysql - 从两个不同的表中选择数据,每天统计并分发

mysql - 通过 IN 子句选择,但行为应类似于 AND

php - 数据库变化检测

mysql - 连接两个表时使用 LEFT OUTER JOIN

php - mysql:分组并获取最新记录

sql - 传递一个表并返回一个表给存储过程或函数?