php - 验证 mysql 行是否与另一行冲突

标签 php mysql datetime

我正在为我工​​作的学校做一个资源预留系统。资源只预留40分钟(这就是类(class)的持续时间)。

资源分为 4 类:

1-学前类

2- 初级

3- 高中,一楼

4- 高中二楼

<小时/>

时间表分为不同的时间跨度:

1- 托儿所

2-学前类

3-更友善

4-小学(一年级 - 三年级)

5-小学(四年级 - 六年级)

6-高中(7年级 - 9年级)

7- 高中(10 年级及以上)

有时,会出现一年级到三年级学生在课间休息,而四年级到六年级学生在类里面的情况。课间休息15分钟,上课40分钟。有时,时间表上会存在冲突,如果允许用户预订资源,则该资源将被其他用户使用至少 10 分钟,这种情况发生在 学前类小学高中

我的DB预留表结构如下:

reservation table

我认为有两个字段可以帮助我确定预订是否会产生冲突:RESERVATIONDUEDATERESERVATIONEXPIREDATE,它们都是 datetime 并拥有我需要的信息。我无法想象如何进行查询来验证是否会发生冲突。

到目前为止,我的查询函数如下所示:

     SELECT T1.SCHEDULE_START, T1.SCHEDULE_END
FROM reservation T4
JOIN schedule_intermediate T1 ON T4.SCHEDULEID_GENERATED = T1.SCHEDULEID_GENERATED
JOIN schedule_type T2 ON T1.SCHEDULE_TYPE_ID = T2.SCHEDULE_TYPE_ID
JOIN schedule T3 ON T1.SCHEDULEID = T3.SCHEDULEID
WHERE (
SELECT COUNT( * ) 
FROM reservation R
INNER JOIN schedule_intermediate SI ON R.SCHEDULEID_GENERATED = SI.SCHEDULEID_GENERATED
WHERE R.RESOURCEID =456
AND SI.SCHEDULE_TYPE_ID =4
AND R.RESERVATIONDUEDATE !=  '2014-08-06 07:35:00'
AND R.RESERVATIONEXPIREDATE !=  '2014-08-06 08:35:00'
AND(( SI.SCHEDULE_START < T1.SCHEDULE_START AND SI.SCHEDULE_END > T1.SCHEDULE_START ) 
    OR ( SI.SCHEDULE_START < T1.SCHEDULE_END AND SI.SCHEDULE_END > T1.SCHEDULE_END ))
) = 0

该查询打算仅选择 RESOURCEIDSCHEDULE_TYPE_ID、“SCHEDULE_START”和“SCHEDULE_END”与提供的信息不同的可用计划时间段在查询中。

此时,我什至不确定查询的结构是否正确,因为该查询的结果是:

enter image description here

我真正想要的是这些属性与所提供的属性不同的时间段。

最佳答案

我正在努力了解您的需求。试试这个...进行与您所做的类似的搜索...

WHERE R.RESOURCEID =456
AND SI.SCHEDULE_TYPE_ID =4
AND R.RESERVATIONDUEDATE >=  '2014-08-06 07:35:00'
AND R.RESERVATIONEXPIREDATE <=  '2014-08-06 08:35:00'

如果您的查询返回 0 行,则不会发生冲突。

目前,您的查询返回该行,因为 Schedule_Start 是 07:50,不等于 07:35:00?

此外,这是否用于重复 session ,如果是,您如何以时间戳格式在数据库中管理它?

关于php - 验证 mysql 行是否与另一行冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25100314/

相关文章:

mysql - 每半个月日期范围分组

MySQL - GROUP BY 的边缘案例使用

c# - 如何在 LINQ 查询中按月分组?

javascript - 将日期/时间字符串转换为日期对象

php - 如何批量处理扫描图像并去除灰尘和规范?

PHP 数组 : summing values with matching dates

mysql - 查找包含文本但优先匹配字段开头的字段

datetime - 在 JPA2 (JPQL) 中仅比较日期(无时间)

php - MySQL 查询问题

php - 具有不同列名的 MySQL INNER JOIN