【问题标题】:How to handle overlapping dates in MySQL?如何处理 MySQL 中的重叠日期?
【发布时间】:2011-06-18 00:40:07
【问题描述】:

正在尝试用物品(即 Beamers)建立一个预订系统,现在我想用 AJAX 检查给定的 item_id 在用户给定的开始和结束日期期间是否可用

编辑:有点不清楚,我想用 MySQL 和 PHP 来做,AJAX 就是我请求结果的方式(可用是/否)

我该怎么做?

我的桌子看起来像这样:

reservation_id int PK
reservation_createDate datetime
reservation_startDate datetime
reservation_endDate datetime
item_id int FK(items.item_id)

假设我在数据库中已经“保留”了以下内容: (为方便起见,所有 item_id = 1)

reservation_id 1, item_id 1, from 2011-7-10 till 2011-7-14
reservation_id 2, item_id 1, from 2011-7-14 till 2011-7-16
reservation_id 3, item_id 1, from 2011-7-16 till 2011-7-20

并且用户想要从 2011-7-12 到 2011-7-18 保留 item_id 1,正如您所看到的,由于所有 3 个保留都妨碍了该操作,因此不会进行。 我将如何使用 MySQL 做到这一点?

【问题讨论】:

  • 您是否在 sql 表中使用了实际的日期字段?
  • 使用 AJAX(意思是:JS)、使用 PHP(见标签)或使用 MySQL:您现在想使用哪些? :?
  • 上面编辑过的帖子,我确实希望它与 PHP/MySQL 一起使用,是的,我使用日期时间字段

标签: php mysql date time overlap


【解决方案1】:
SELECT COUNT(*)<1 AS Available FROM `TABLE` WHERE (`startDate`>CHECKING_START_TIME AND `startDate`<CHECKING_END_TIME) OR (`endDate`>CHECKING_START_TIME AND `endDate`<CHECKING_END_TIME) OR (`startDate`<CHECKING_START_TIME AND `endDate`>CHECKING_END_TIME)

如果结果大于0,则存在重叠

【讨论】:

  • 部分正确,但在你的回答中,如果我输入 2011-7-11 到 2011-7-12 给我 0 个结果,而在 DB 中有 10 到 14 的预订..
  • @Sander,卫生部!哈哈,我又添加了一个条件来解决这种情况
  • 好的!我想我们现在有了所有的可能性:D
猜你喜欢
  • 2015-06-26
  • 2019-02-12
  • 1970-01-01
  • 2021-06-27
  • 1970-01-01
  • 2011-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多