MySQL查找类时间冲突
我在这里已经研究了很多解决方案,但在我的情况下,它们中的任何一个都不起作用。在这里,我肯定超出了我的SQL技能水平 我有一个表格,其中包含每节课的开始和结束日期/时间:MySQL查找类时间冲突,mysql,sql,Mysql,Sql,我在这里已经研究了很多解决方案,但在我的情况下,它们中的任何一个都不起作用。在这里,我肯定超出了我的SQL技能水平 我有一个表格,其中包含每节课的开始和结束日期/时间: time\u end和time\u start是Unix时间戳 当一个学生把一门课放进购物车时,我必须检查并确保没有时间冲突。这是一个时间范围。可以是4小时或2小时的课程。如果有任何时间冲突,我必须提醒学生。time_class_id是一个很容易有十几行日期/时间和不同日期/时间的类 这是我得到的最接近的结果,但这似乎只发现开始
time\u end
和time\u start
是Unix时间戳
当一个学生把一门课放进购物车时,我必须检查并确保没有时间冲突。这是一个时间范围。可以是4小时或2小时的课程。如果有任何时间冲突,我必须提醒学生。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)
选择a.time\u class\u id、a.time\u start、a.time\u end、,
b、 时间类id,b.时间开始,b.时间结束
从a班到b班
其中a.time\u class\u id在($classes\u in\u cart)
和b.time\u class\u id in($classes\u in\u cart)
和(a.time\u class\u id b.time\u class\u id
和a.time\u start>=b.time\u start和
a、 时间结束我想你想要这样的东西:
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;
选择a.time\u class\u id、a.time\u start、a.time\u end、,
b、 时间类id,b.时间开始,b.时间结束
从类_乘以一个连接
b类
在集合中查找时(a.time\u class\u id,$classes\u in\u cart)>0和
在集合中查找(b.time\u class\u id,$classes\u in\u cart)>0和
a、 时间类id
两个时间段重叠,一个开始在第二个结束之前,而第一个结束在第二个开始之后。可能重复感谢这一点。这接近我需要的,但如果购物车中只有两个类,则表示存在冲突,但只返回其中一个类。如果购物车中有3个类…则返回其中两个类嗯……但不是冲突的两个。我添加了一个“a.time\u class\u id组,b.time\u class\u id组”它似乎找到了冲突,只是没有返回冲突的两个类,只是返回了一个……如果购物车中只有两个,这实际上是好的……在代码末尾键入b.time\u b.time\u start..fyia查看此[链接]这段代码似乎对我有用:选择a.time\u class\u id、a.time\u start、a.time\u end、b.time\u class\u id、b.time\u start、b.time\u end FROM class\u times a、class\u times b,其中a.time\u class\u id in($add\u-query)和b.time\u class\u id in($add\u-query)和(a.time\u class\u id b.time\u-start=b.time\u-start)
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;