Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL查找类时间冲突_Mysql_Sql - Fatal编程技术网

MySQL查找类时间冲突

MySQL查找类时间冲突,mysql,sql,Mysql,Sql,我在这里已经研究了很多解决方案,但在我的情况下,它们中的任何一个都不起作用。在这里,我肯定超出了我的SQL技能水平 我有一个表格,其中包含每节课的开始和结束日期/时间: time\u end和time\u start是Unix时间戳 当一个学生把一门课放进购物车时,我必须检查并确保没有时间冲突。这是一个时间范围。可以是4小时或2小时的课程。如果有任何时间冲突,我必须提醒学生。time_class_id是一个很容易有十几行日期/时间和不同日期/时间的类 这是我得到的最接近的结果,但这似乎只发现开始

我在这里已经研究了很多解决方案,但在我的情况下,它们中的任何一个都不起作用。在这里,我肯定超出了我的SQL技能水平

我有一个表格,其中包含每节课的开始和结束日期/时间:

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;