【发布时间】:2015-07-10 17:01:16
【问题描述】:
这似乎是一个典型的问题,但我找不到这个问题的答案。
我有一张预订桌:
book_id | arrive_date | depart_date
1 2015-07-20 2015-07-22
2 2015-07-22 2015-07-23
3 2015-07-19 2015-07-20
你会看到我已经证明了出发日期可以是到达日期,反之亦然
在添加日期之前,我会检查日期范围是否与表格中的日期冲突,重要的是允许出发日期为到达日期,因为此人将要离开,当我检查时允许这样做表中的日期我使用以下 SQL 将日期添加到到达日期并从出发日期减去一天:
Select * From booking Where booking.unit_id = 58
And ( DATE_ADD(booking.from_date, INTERVAL 1 DAY)
BETWEEN '2015-07-23' AND '2015-07-24'
OR
DATE_SUB(booking.to_date, INTERVAL 1 DAY)
BETWEEN '2015-07-23' AND '2015-07-24'
OR '2015-07-23'
BETWEEN DATE_ADD(booking.from_date, INTERVAL 1 DAY)
AND DATE_SUB(booking.to_date, INTERVAL 1 DAY)) Limit 1
当我添加第一个日期时,没问题...与第二个和第三个相同,这是因为我输入的第一个日期范围介于(20 日和 22 日)之间。然后我尝试添加'2015-07-23' AND '2015-07-24',使用上面的SQL进行检查,这显然是返回结果。我需要一种方法来允许这些日期被接受,因为 23 日是出发日期。
任何帮助将不胜感激
我还应该提到,我还有一个保存被阻止日期“booking_prev”的表,因此在输入之前也将使用类似的查询来检查预订表中的阻止日期。
【问题讨论】:
-
无需先检查。事实上,这会适得其反,因为有人可能会在你检查和接下来的任何事情之间插入一个值。
-
是的,虽然只有在预订表中没有日期的情况下才会显示并允许预订,但我仍然需要一种方法首先检查日期范围是否有效......请看看我有什么已添加。
-
您不需要先检查。 (除非使用事务)检查可以而且应该在插入期间进行。
-
如果你有一个很棒的建议......在另一部分我也只想在一个表格中插入日期,如果它们不在另一个表格中......不是确定如何在一次插入上完成。