这似乎是一个典型的问题,但是我找不到这个问题的答案。
我有一个预订表:
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将日期添加到arrival_date,并从depart_date减去SUBTRACT:
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’和‘2015-07-24’,这是使用上述SQL检查的,显然返回了结果。我需要一种允许这些日期被接受的方法,因为23号是depart_date。
任何帮助,将不胜感激
我还要提到的是,我还有一个表,其中包含阻止日期“ booking_prev”,因此在输入预订日期之前,也会使用类似的查询来检查预订日期中的阻止日期。
考虑以下…
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(book_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,arrive_date DATE NOT NULL
,depart_date DATE NOT NULL
);
INSERT INTO my_table VALUES
(1,'2015-07-20','2015-07-22'),
(2,'2015-07-22','2015-07-23'),
(3,'2015-07-19','2015-07-20');
SELECT * FROM my_table;
+---------+-------------+-------------+
| 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 |
+---------+-------------+-------------+
因此,SELECT可能看起来像这样…
SELECT '2015-07-22','2015-07-24'
FROM (SELECT 1) x
LEFT
JOIN my_table y
ON y.arrive_date < '2015-07-24' AND y.depart_date > '2015-07-22'
WHERE y.book_id IS NULL
LIMIT 1;
Empty set (0.00 sec)
SELECT '2015-07-23','2015-07-24'
FROM (SELECT 1) x
LEFT
JOIN my_table y
ON y.arrive_date < '2015-07-24' AND y.depart_date > '2015-07-23'
WHERE y.book_id IS NULL
LIMIT 1;
+------------+------------+
| 2015-07-23 | 2015-07-24 |
+------------+------------+
| 2015-07-23 | 2015-07-24 |
+------------+------------+
…但是您不需要先检查它们。我刻意编写了SELECTs,使得检查可以作为INSERT的一部分进行。
INSERT INTO my_table (arrive_date,depart_date)
SELECT '2015-07-23','2015-07-24'
FROM (SELECT 1) x
LEFT
JOIN my_table y
ON y.arrive_date < '2015-07-24' AND y.depart_date > '2015-07-23'
WHERE y.book_id IS NULL
LIMIT 1;
SELECT * FROM my_table;
+---------+-------------+-------------+
| 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 |
| 4 | 2015-07-23 | 2015-07-24 |
+---------+-------------+-------------+
实际上,根据您要提供的用户体验,您可能需要先运行SELECT,以便用户可以立即查看哪些日期不可用,然后在进行预订时运行INSERT-
以确保在用户预订过程中没有人抓住这些日期。
问题内容: 我在JUnit测试中有以下代码,该代码上周似乎正常工作,但本周失败了: 您可能会从我的评论中推断出,由于12日是星期二,因此我希望将DAY_OF_WEEK设置为星期五后,日期将为15。但是,打印的值为22,并导致测试失败。 但是,如果我将代码更改如下,并添加另一个调用以获取: 我得到预期的输出12和15。 有人可以解释发生了什么,为什么上周该测试仍然有效? 问题答案: 首先要了解的是,
我在本教程的帮助下制作了日历:http://droidwalk.blogspot.it/2012/11/android-calendar-sample.html ..但是这个日历从星期天开始,我想从星期一开始。。我试图改变价值观在函数中设置对象GregorianCalendar,但它不会给出所需的结果。本周从周一开始,但在某些月份,我们失去了第一周。我发现了一个类似的问题:从周一开始制作日历,
我试图使用VBScript和Oauth脱机访问谷歌日历API。我设法获得了一个刷新令牌和一个访问令牌,现在我想进入实际使用API的步骤,使用以下代码: 我得到的回应是: 即使访问令牌是有效的--如果我将sURL更改为https://www.googleapis.com/oauth2/v1/tokeninfo并运行该脚本,我将得到以下响应,显示一个有效的令牌: 如果我粘贴URL https://ww
我目前正在尝试这样做,当我在日历视图中选择一天时,该天的所有事件都会列出。我很难让它显示一天中的所有事件(看起来它在上午12点到11点59分不起作用?)。这里是我目前拥有的。 和 如果我有12am-11:59am的事件1和12pm-11:59pm的事件2,则仅列出事件2。
问题内容: 我有一个小问题,我正在开发一个应用程序,我需要将每周的开始日期从星期一更改为另一个(星期四,星期六)。在Android中这可能吗,我需要计算周的开始及其知道日期的结束。(例如,星期几从星期四开始) 注意:我只是android开发的初学者。这是我的代码SimpleDateFormat dateformate = new SimpleDateFormat(“ dd / MM”); 使用上面
我有一个小问题,我正在开发一个应用程序,我需要将一周的开始日从星期一更改为另一个(星期四,星期六)。这在android中可能吗,我需要计算一周的开始和结束知道日期。(例如,一周从星期四开始) 注意:我只是android开发的初学者。这是我的代码SimpleDataFormat DateFormat=new SimpleDataFormat(“dd/MM”); 使用上面的代码,我得到了结果,但星期一