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;
आपको केवल your_duration
. के लिए मूल्यों की आपूर्ति करने की आवश्यकता है (पूर्णांक), start_of_search_window
(तारीख समय) और end_of_search_window
(तारीख समय)।
और अगर आप घंटियाँ और सीटी बजाना चाहते हैं....
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;
आपको विंडो के भीतर तीन सबसे छोटे उपलब्ध स्लॉट (यानी लक्ष्य आकार के निकटतम) देगा।