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

MySQL / PHP - Tìm các khoảng thời gian khả dụng

SELECT a.end AS free_after
FROM bookings a
WHERE NOT EXISTS (
  SELECT 1
  FROM bookings b
  WHERE b.start BETWEEN a.end AND a.end + INTERVAL your_duration HOURS
)
AND a.end BETWEEN start_of_search_window AND end_of_search_window;

bạn chỉ cần cung cấp các giá trị cho your_duration (số nguyên), start_of_search_window (ngày giờ) và end_of_search_window (ngày giờ).

Và nếu bạn muốn có chuông và còi ....

SELECT free_from, free_until
FROM (
  SELECT a.end AS free_from,
  (SELECT MIN(c.start)
   FROM bookings c
   WHERE c.start > a.end) as free_until
  FROM bookings a
  WHERE NOT EXISTS (
    SELECT 1
    FROM bookings b
    WHERE b.start BETWEEN a.end AND a.end + INTERVAL your_duration HOUR
  )
  AND a.end BETWEEN start_of_search_window AND end_of_search_window
)
ORDER BY free_until-free_from
LIMIT 0,3;

Sẽ cung cấp cho bạn ba vị trí có sẵn ngắn nhất (tức là gần nhất với kích thước mục tiêu) trong cửa sổ.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL, việc sao chép tệp bảng dẫn đến LỖI 1017 (HY000):Không thể tìm thấy tệp:mặc dù nó ở đó

  2. mysql hiển thị các khe thời gian có sẵn và các khe thời gian bận từ bảng

  3. Nguồn lực # là gì?

  4. Cách sử dụng GROUP_CONCAT trong CONCAT trong MySQL

  5. Cách trả về bảng từ hàm MySQL