我预约了一张预约表:
| id | user_id | guest_name | appointment_date | start_time | end_time |
|----|---------|------------|------------------|------------|----------|
| 1 | 1 | Abc | 2016-09-30 | 13:00:00 | 13:30:00 |
考虑到名为" Abc"预约2016-09-30
13:00
到13:30 pm
的约会预订,我想查看日期13:00-13:30
上提供的时间段(即2016-09-30
)不得与以下日期时间输入重叠。
| appointment_date | start_time | end_time |
|------------------|------------|----------|
| 2016-09-30 | 11:00 | 12:00 |
| 2016-09-30 | 12:30 | 13:00 |
| 2016-09-30 | 13:30 | 14:00 |
| 2016-09-30 | 14:00 | 14:30 |
| 2016-09-30 | 12:45 | 13:15 |
| 2016-09-30 | 13:15 | 13:45 |
| 2016-09-30 | 13:10 | 13:20 |
| 2016-09-30 | 13:00 | 13:25 |
| 2016-09-30 | 13:10 | 13:30 |
| 2016-09-30 | 13:00 | 13:30 |
| 2016-10-01 | 13:00 | 13:30 |
考虑到以下输入,您可能会看到以13:00
到13:30
开头或结尾的广告位与约会预订表中的记录重叠。
简而言之,如果提供的输入的开始和结束时间与它们重叠,我想要一个从约会预订表返回记录的查询。
我试过以下:
SELECT * FROM appointments
WHERE user_id = 1
AND appointment_date = DATE('2016-09-30')
AND ( (start_time = '11:00' AND end_time = '12:00')
OR
(start_time < '11:00' AND end_time > '12:00')
OR
(start_time > '11:00' AND end_time < '12:00')
OR (
(start_time > '11:00' OR end_time < '11:00')
AND
(start_time < '12:00' OR end_time < '12:00'))
);
但不成功。有人知道怎么检查吗?
答案 0 :(得分:1)
您可以使用以下查询:
SELECT DISTINCT t1.*
FROM appointments t1
JOIN dates t2 ON t1.appointment_date = t2.appointment_date AND
t1.start_time <= t2.end_time AND
t1.end_time >= t2.start_time
只要在另一个表中存在至少一个重叠记录,上述查询就会返回表appointments
的记录。