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

MySQL / PHP - Znajdź dostępne przedziały czasowe

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;

wystarczy podać wartości dla your_duration (liczba całkowita), start_of_search_window (data i godzina) i end_of_search_window (data i godzina).

A jeśli chcesz dzwonków i gwizdków...

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;

Daje ci trzy najkrótsze dostępne sloty (tj. najbliższe docelowemu rozmiarowi) w oknie.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wykryć, czy użytkownik się wylogował w php?

  2. Hibernuj automatycznie twórz bazę danych

  3. MySQL, kopiowanie plików tabel powoduje BŁĄD 1017 (HY000):Nie można znaleźć pliku:mimo że tam jest

  4. Jak przechowywać długość i szerokość geograficzną w bazie danych. MySQL nie pójdzie dalej niż -99,999999

  5. Trwałość połączenia PHP MySQL