MySQL 查找类时间冲突

标签 mysql sql

我在这里查看了很多解决方案,但无法让其中任何一个在我的情况下工作。我肯定超出了我的 SQL 技能水平。

我有一个表,其中保存每个类(class)的类(class)开始和结束日期/时间:

Table: class_times

Columns:
time_class_id
time_end
time_start

time_endtime_start 是 Unix 时间戳

当学生将类(class)放入购物车时,我必须检查并确保与购物车中的任何其他类(class)没有时间冲突。这是一个时间范围。可以是4小时的类(class),也可以是2小时的类(class)。如果有任何时间冲突,我必须提醒学生。 time_class_id 是一个可以轻松包含十几行日期/时间以及不同行的类。

这是我得到的最接近的结果,但这似乎只发现开始时间和结束时间完全相同的冲突:

SELECT a.time_class_id, a.time_start, a.time_end, 
b.time_class_id, b.time_start, b.time_end
FROM class_times a, class_times b
WHERE a.time_class_id in ($classes_in_cart)
AND b.time_class_id in ($classes_in_cart)
AND (a.time_class_id <> b.time_class_id
AND a.time_start >= b.time_start AND
a.time_end <= b.time_end)

任何帮助将不胜感激。

最佳答案

我想你想要这样的东西:

SELECT a.time_class_id, a.time_start, a.time_end,
       b.time_class_id, b.time_start, b.time_end
FROM class_times a JOIN
     class_times b
     on find_in_set(a.time_class_id, $classes_in_cart) > 0 and
        find_in_set(b.time_class_id, $classes_in_cart) > 0 and
        a.time_class_id < b.time_class_id and
        a.time_start <= b.time_end and
        a.time_end >= b.time_start;

两个时间段重叠,即一个时间段在第二个时间段结束之前开始,而第一个时间段在第二个时间段开始之后结束。

关于MySQL 查找类时间冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33313017/

相关文章:

mysql - 用于合并两个表并将行转换为列的 SQL 脚本

mysql - 存储过程更新所有行而不仅仅是一行

java - getServletContext() 的空指针异常?

sql - TSQL\XPATH - 获取 CROSS APPLY 节点(子节点)上元素的正确 XPath 索引

mysql查询: match against using wildcard

mysql - ejabberd MySQL连接错误

php - 完善我的 Eloquent 查询 (Laravel)

php - MySQL插入语句不会插入?

sql - WHERE 子句中的 CASE

javascript - 如何将输入的 id 值存储到另一个页面上的变量?