用于检查事件冲突的 MySQL 查询

标签 mysql sql database

目前,我正在制作一个学校社区网站,我遇到了一个问题,管理员发布了一个新事件,他/她想要检查事件开始日期和时间是否没有冲突以及结束日期和时间,然后再将其保存到数据库。我尝试了很多查询,但仍然无法获得确切的 sql。

我正在使用 MySQL Server 5 和 PHP 5.3。任何人都可以帮助我如何查询表,我的意思是正确的 sql 字符串。

这是表字段:

  • event_id => int,
  • event_type => enum('学校','部门'),
  • event_title=> 文本,
  • event_details=> 长文本,
  • event_start=> 日期时间,
  • event_end=> 日期时间,
  • event_added_by=> int,
  • event_modified_on=> 日期时间,

这是我现在拥有的:

 SELECT *, time(event_start) as start_time, time(event_end) as end_time
 FROM `tbl_events` WHERE ((date(event_start) between '2011-12-9' and
 '2011-12-15') AND (time(event_start) between '00:00:00' and
 '01:00:00')) OR ((date(event_end) between '2011-12-9' and
 '2011-12-15') AND

最佳答案

您需要查找表明存在冲突的四件事:

  1. 现有事件在您的事件开始之前开始,并在您的事件结束之后结束(您的事件位于现有事件内)
  2. 现有事件在您的事件开始之前开始,并在您的事件开始之后结束(与新事件的开始部分重叠)
  3. 现有事件在您的事件结束之前开始,并在您的事件结束之后结束(与新事件的结束时间重叠)
  4. 现有事件在您的事件开始后开始,并在您的事件结束前结束(现有事件位于新事件内)

之前和之后,我的意思是同时或之前/之后(<= 和 >=)。

关于用于检查事件冲突的 MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7603741/

相关文章:

MySQL:避免在更新之前必须在 UNIQUE 字段上设置 NULL 值

mysql - Grails hibernate/Searchable 通过给出以下异常来停止服务器启动

PHP PDO 检查返回是否为 null

java - @OneToOne 与 JPA 的关系

mysql - SQL 两个日期之间的所有天数

PHP mysqli_fetch_array() 不会在 while 循环中将所有选择查询插入到表中

sql - 如何获取六个月内每个月的最小日期?

php - 如何判断 MySQL UPDATE 何时成功与实际更新的数据?

iphone - 在不删除用户数据的情况下迁移/更新核心数据应用程序!

sql - 删除 H2 中列的唯一约束