Mysql
 sql >> база данни >  >> RDS >> Mysql

Проверка за конфликти на периоди от време в MySQL

Проблемът, който имате, е, че вашата заявка не е достатъчно стабилна. Когато разбиете проблема, това, което имате, е следното:

Ако диапазонът, дефиниран от $check_in и $check_out припокрива диапазона, дефиниран от checkin и checkout в всяко начин, тогава стаята е резервирана. В противен случай е безплатно.

Това означава, че:

  • Ако $check_in>=checkin и $check_in <=checkout , стаята е зарезервирана
  • ИЛИ Ако $check_out>=checkin и $check_out <=checkout , стаята е зарезервирана
  • ИЛИ Ако $check_in <=checkin и $check_out>=checkout , стаята е зарезервирана

Така че трябва да представите и двата сценария във вашата подзаявка, за да получите информацията, която търсите.

Също така се надяваме, че ще използвате datetime за вашите сравнения, а не само time , в противен случай ще имате странични ефекти.

РЕДАКТИРАНЕ:SQL заявка

(Имайте предвид, че има повече от един начин да одирате котка, така да се каже. Просто давам пример, който се съобразява с това, което вече имате, доколкото е възможно. Още веднъж също предполагам, че checkin , checkout , $check_in и $check_out всичко ще се разреши до datetime видове)

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. Имам ли нужда от htmlentities() или htmlspecialchars() в подготвените оператори?

  2. Как да създадете връзка в MySQL Workbench

  3. Как да комбинирате ГРУПА ПО, ПОРЪЧКА ПО и ИМАЩА

  4. Съхранявайте информацията за акаунта във всички дейности в android studio

  5. MySQL преобразува тип данни на колона от VARCHAR в INT