Mysql 检查时间是否介于多次之间(时间数据类型)
我正在研究带有时间安排的预订模块。为此,我有两个不同的时间数据,一个是时间数据,另一个是预定时间数据。现在我想展示可用的 这是带有数据的time_数据表Mysql 检查时间是否介于多次之间(时间数据类型),mysql,Mysql,我正在研究带有时间安排的预订模块。为此,我有两个不同的时间数据,一个是时间数据,另一个是预定时间数据。现在我想展示可用的 这是带有数据的time_数据表 |---|---------| |id |vtime | |---|---------| |1 |08:00:00 | |2 |09:00:00 | |3 |10:00:00 | |4 |11:00:00 | |5 |12:00:00 | |6 |13:00:00 | |7 |14:00:00 | |8 |15:00:00
|---|---------|
|id |vtime |
|---|---------|
|1 |08:00:00 |
|2 |09:00:00 |
|3 |10:00:00 |
|4 |11:00:00 |
|5 |12:00:00 |
|6 |13:00:00 |
|7 |14:00:00 |
|8 |15:00:00 |
|9 |16:00:00 |
|10 |17:00:00 |
|11 |18:00:00 |
|12 |19:00:00 |
|13 |20:00:00 |
|14 |21:00:00 |
|15 |22:00:00 |
|---|---------|
|----|----------|----------------|------------|----------------|-----------|---------|
| id | userid | facilityid | courtno | bookingdate | starttime | endtime |
|----|----------|----------------|------------|----------------|-----------|---------|
| 1 | 1 | 1 | 1 | 2017-02-20 |08:00:00 |11:00:00 |
| 2 | 3 | 1 | 1 | 2017-02-20 |13:00:00 |15:00:00 |
| 3 | 2 | 1 | 1 | 2017-02-20 |11:00:00 |13:00:00 |
| 4 | 5 | 1 | 1 | 2017-02-21 |11:00:00 |13:00:00 |
|----|----------|----------------|------------|----------------|-----------|---------|
这是有数据的预定时间表
|---|---------|
|id |vtime |
|---|---------|
|1 |08:00:00 |
|2 |09:00:00 |
|3 |10:00:00 |
|4 |11:00:00 |
|5 |12:00:00 |
|6 |13:00:00 |
|7 |14:00:00 |
|8 |15:00:00 |
|9 |16:00:00 |
|10 |17:00:00 |
|11 |18:00:00 |
|12 |19:00:00 |
|13 |20:00:00 |
|14 |21:00:00 |
|15 |22:00:00 |
|---|---------|
|----|----------|----------------|------------|----------------|-----------|---------|
| id | userid | facilityid | courtno | bookingdate | starttime | endtime |
|----|----------|----------------|------------|----------------|-----------|---------|
| 1 | 1 | 1 | 1 | 2017-02-20 |08:00:00 |11:00:00 |
| 2 | 3 | 1 | 1 | 2017-02-20 |13:00:00 |15:00:00 |
| 3 | 2 | 1 | 1 | 2017-02-20 |11:00:00 |13:00:00 |
| 4 | 5 | 1 | 1 | 2017-02-21 |11:00:00 |13:00:00 |
|----|----------|----------------|------------|----------------|-----------|---------|
根据预定的时间数据,我正在运行一个内部联接查询,以获取特定日期的可用时间
我的问题是
SELECT DISTINCT time_data.vtime FROM booked_time INNER JOIN time_data ON time_data.vtime>=booked_time.endtime OR time_data.vtime<booked_time.starttime WHERE facility_id='1' AND court='1' AND on_date='2017-02-20'
但它每次都会播放15张唱片。它应该忽略08:00:00,09:00:00,11:00:00,12:00:00,13:00:00,14:00:00,15:00:00小时
如何获得仅有的可用时间?有了这些表,或者我需要更改数据表结构?我认为您需要的正确逻辑是:
SELECT t.vtime
FROM time_data t LEFT JOIN
booked_time b
ON t.vtime >= b.starttime AND
t.vtime < b.endtime AND
b.facility_id = '1' AND b.court = '1' AND
b.on_date = '2017-02-20'
WHERE b.vtime IS NULL
这首先使用左联接联接表,以便在时间\ U数据中包含没有任何联接记录的记录。
然后,它使用WHERE来排除有记录连接的任何行。谢谢Gordon Linoff。对我来说,第二个问题正在起作用。你能解释一下为什么在不存在的地方使用select 1吗?@user1624540。使用“选择”时需要选择一些内容。发现1是最容易输入的,而且非常明确。谢谢@Gordon Linoff