Hallo allerseits, ich habe die folgende Zeile als Beispiel in meiner Tabelle

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

Und ich möchte überprüfen, ob start_time und end_time in der Tabelle vorhanden sind oder nicht. Ich verwende die folgende Abfrage, arbeite aber nicht richtig. Wo irre ich mich?

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
Priya Jaiswal 19 Jän. 2019 im 09:33

5 Antworten

Beste Antwort

Sie müssen die Prüfungen für shop_id und die Zeitbereiche klar trennen:

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');

Der Operator AND in MySQL hat eine höhere Priorität als der Operator OR. Ihre aktuelle Abfrage wird also wie folgt ausgewertet:

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';

Dies ist eindeutig nicht die gleiche Logik wie Sie, die Sie wahrscheinlich beabsichtigt haben.

2
Tim Biegeleisen 19 Jän. 2019 im 06:40

Versuchen Sie, Gruppen in solchen Abfragen zu bilden

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'))

Fügen Sie die zusätzlichen Klammern hinzu, um Gruppen zu bilden.

0
Sanjit Bhardwaj 19 Jän. 2019 im 06:36

Versuchen Sie diese Abfrage:

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
NimeSh Patel 19 Jän. 2019 im 06:39

Versuche dies

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
Ram 19 Jän. 2019 im 06:43

Wenn Sie die Zeiten '10: 10: 00 'und '11: 01: 00' erhalten und wissen möchten, ob sich etwas mit diesem Zeitraum überschneidet, lautet die Logik:

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';

Für überlappende Intervalle ist between nicht geeignet.

0
Gordon Linoff 19 Jän. 2019 im 11:17