sql >> Databasteknik >  >> RDS >> Mysql

Söker efter datumintervallkonflikter i MySQL

Problemet du har är att din fråga inte är tillräckligt robust. När du bryter ner problemet, vad du har är detta:

Om intervallet definieras av $check_in och $check_out överlappar intervallet som definieras av checkin och checkout i alla sätt, då är rummet bokat. Annars är det gratis.

Det betyder att:

  • Om $check_in>=checkin och $check_in <=checkout , rummet är BOKAT
  • ELLER Om $check_out>=checkin och $check_out <=checkout , rummet är BOKAT
  • ELLER Om $check_in <=checkin och $check_out>=checkout , rummet är BOKAT

Så du måste representera båda dessa scenarier i din underfråga för att få den information du letar efter.

Dessutom kommer du förhoppningsvis att använda datetime för dina jämförelser och inte bara time , annars kommer du att få biverkningar.

EDIT:SQL-fråga

(Tänk på att det finns mer än ett sätt att flå en katt så att säga. Jag ger bara ett exempel som stämmer överens med det du redan har så mycket som möjligt. Återigen antar jag också att checkin , checkout , $check_in och $check_out kommer alla att lösas till datetime typer)

SELECT *
FROM room
WHERE room_id NOT IN
(SELECT room_id 
 FROM bookings
 WHERE
   (checkin <= '$check_in' AND checkout >= '$check_in') OR
   (checkin <= '$check_out' AND checkout >= '$check_out') OR
   (checkin >= '$check_in' AND checkout <= '$check_out'))


  1. FEL:HHH000299:Kunde inte slutföra schemauppdatering java.lang.NullPointerException

  2. PostgreSQL IF uttalande

  3. PostgreSQL-motsvarighet för TOP n WITH TIES:LIMIT med slipsar?

  4. Ansökan för att omvända MySQL &PostgreSQL DB?