Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 检查时间是否介于多次之间(时间数据类型)_Mysql - Fatal编程技术网

Mysql 检查时间是否介于多次之间(时间数据类型)

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

我正在研究带有时间安排的预订模块。为此,我有两个不同的时间数据,一个是时间数据,另一个是预定时间数据。现在我想展示可用的

这是带有数据的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 |
|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