Оператор выбора SQL, где, И, ИЛИ не работает правильно - PullRequest
0 голосов
/ 19 января 2019

Привет всем, у меня есть следующая строка в качестве образца в моей таблице

id      shop_id     start_time      end_time
1       21          10:00           11:00

, и я хочу проверить, существуют ли start_time и end_time в таблице или нет, я использую следующий запрос, но не работаю правильно, гдея не прав?

select * 
  from usr_booking 
 where shop_id='21' 
   and start_time between '10:10:00' and '11:01:00' 
    or end_time   between '10:10:00' and '11:01:00'

Ответы [ 5 ]

0 голосов
/ 19 января 2019

Если вам даны времена «10: 10: 00» и «11: 01: 00», и вы хотите знать, перекрывается ли что-либо с этим периодом, тогда логика:

select b.* 
from usr_booking 
where shop_id = 21 and -- do not use single quotes for numeric constants (assuming `shop_id` is a number
      end_time > '10:10:00' and
      start_time < '11:01:00';

Для перекрывающихся интервалов between не подходит.

0 голосов
/ 19 января 2019

Попробуйте это

SELECT * FROM usr_booking WHERE shop_id=21 AND (start_time BETWEEN '10:10:00' AND '11:01:00') OR (end_time BETWEEN '10:10:00' AND '11:01:00')
0 голосов
/ 19 января 2019

Попробуйте этот запрос:

SELECT *
FROM usr_booking 
Where shop_id='21' AND start_time BETWEEN '10:10:00' AND '11:01:00' 
AND end_time BETWEEN '10:10:00' AND '11:01:00'
0 голосов
/ 19 января 2019

Вам необходимо четко разделить проверки на shop_id и временных диапазонах:

SELECT *
FROM usr_booking
WHERE
    shop_id = 21 AND
    (start_time BETWEEN '10:10:00' AND '11:01:00' OR
     end_time BETWEEN '10:10:00' AND '11:01:00');

Оператор AND в MySQL имеет более высокий приоритет, чем оператор OR.Итак, ваш текущий запрос на самом деле оценивается так:

SELECT *
FROM usr_booking
WHERE
    (shop_id = 21 AND
     start_time BETWEEN '10:10:00' AND '11:01:00') OR
     end_time BETWEEN '10:10:00' AND '11:01:00';

Очевидно, что это не та логика, которую вы, вероятно, предполагали.

0 голосов
/ 19 января 2019

Попробуйте составить группы в запросах такого типа

select * from usr_booking where shop_id='21' AND ((start_time between '10:10:00' and '11:01:00') OR (end_time between '10:10:00' and '11:01:00'))

Добавьте дополнительные скобки для групп.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...