Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Sprawdzanie konfliktów zakresu dat w MySQL

Twój problem polega na tym, że Twoje zapytanie nie jest wystarczająco niezawodne. Kiedy rozwiążesz problem, masz to:

Jeśli zakres zdefiniowany przez $check_in i $check_out nakłada się na zakres zdefiniowany przez checkin i checkout w dowolnym sposób, wtedy pokój jest zarezerwowany. W przeciwnym razie jest bezpłatny.

Oznacza to, że:

  • Jeśli $check_in>=checkin i $check_in <=checkout , pokój jest ZAREZERWOWANY
  • LUB Jeśli $check_out>=checkin i $check_out <=checkout , pokój jest ZAREZERWOWANY
  • LUB Jeśli $check_in <=checkin i $check_out>=checkout , pokój jest ZAREZERWOWANY

Musisz więc przedstawić oba te scenariusze w swoim podzapytaniu, aby uzyskać informacje, których szukasz.

Miejmy nadzieję, że będziesz używać datetime do porównań, a nie tylko time , w przeciwnym razie wystąpią skutki uboczne.

EDYCJA:Zapytanie SQL

(Pamiętaj, że istnieje więcej niż jeden sposób na oskórowanie kota, że ​​tak powiem. Po prostu podaję przykład, który zachowuje jak najwięcej tego, co już masz. Po raz kolejny zakładam, że checkin , checkout , $check_in i $check_out wszystko zmieni się na datetime typy)

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Uzyskiwanie dokładnego czasu wykonania instrukcji MySQL

  2. Jak zaokrąglić w dół do najbliższej liczby całkowitej w MySQL?

  3. Dlaczego AES_DECRYPT zwraca wartość null?

  4. Jak poradzić sobie z błędem klucza obcego MySQL w PHP?

  5. Wyszukiwanie pełnotekstowe Django MySQL