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

MySQL / PHP - Намерете налични времеви слотове

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;

Ще ви даде трите най-къси налични слота (т.е. най-близкият до целевия размер) в рамките на прозореца.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вземете стойностите за последните 6 месеца в mysql

  2. Mysql или/и приоритет?

  3. Има ли начин в SQL (MySQL) да се направи кръгова система ORDER BY в определено поле?

  4. Използвате ли LIMIT в рамките на GROUP BY, за да получите N резултата на група?

  5. Конфигурация на индекс на Mysql