Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Kiểm tra xung đột phạm vi ngày trong MySQL

Vấn đề bạn đang gặp phải là truy vấn của bạn không đủ mạnh. Khi bạn chia nhỏ vấn đề, những gì bạn có là:

Nếu phạm vi được xác định bởi $check_in$check_out chồng lên phạm vi được xác định bởi checkincheckout trong bất kỳ cách, sau đó phòng được đặt. Nếu không, nó là miễn phí.

Điều này có nghĩa là:

  • Nếu $check_in> =checkin$check_in <=checkout , phòng được ĐÃ ĐẶT CHỖ
  • HOẶC Nếu $check_out> =checkin$check_out <=checkout , phòng được ĐÃ ĐẶT CHỖ
  • HOẶC Nếu $check_in <=checkin$check_out> =checkout , phòng được ĐÃ ĐẶT CHỖ

Vì vậy, bạn cần thể hiện cả hai trường hợp này trong truy vấn con của mình để có được thông tin bạn đang tìm kiếm.

Ngoài ra, hy vọng bạn sẽ sử dụng datetime để so sánh của bạn và không chỉ time , nếu không bạn sẽ có tác dụng phụ.

CHỈNH SỬA:Truy vấn SQL

(Hãy nhớ rằng có nhiều cách để lột da một con mèo, có thể nói như vậy. Tôi chỉ cung cấp một ví dụ phù hợp với những gì bạn đã có càng nhiều càng tốt. Một lần nữa, tôi cũng giả định rằng checkin , checkout , $check_in$check_out tất cả sẽ giải quyết thành datetime loại)

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. Lỗi Mysql 'Có lỗi -1 từ công cụ lưu trữ'

  2. Đếm số hàng trong Doctrine 2

  3. Làm thế nào để xử lý đúng cách các deadlock InnoDB trong Java / JDBC?

  4. MySQL - Khắc phục - Lỗi - Mật khẩu của bạn không đáp ứng các yêu cầu chính sách hiện tại

  5. Làm thế nào để chặn yêu cầu DB? (MySQL)