我在这里查看了很多解决方案,但无法让其中任何一个在我的情况下工作。我肯定超出了我的 SQL 技能水平。
我有一个表,其中保存每个类(class)的类(class)开始和结束日期/时间:
Table: class_times
Columns:
time_class_id
time_end
time_start
time_end
和 time_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/