sql >> Databáze >  >> RDS >> Mysql

MySQL / PHP - Najděte dostupné časové úseky

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;

stačí zadat hodnoty pro your_duration (celé číslo), start_of_search_window (datum a čas) a end_of_search_window (datum a čas).

A pokud chcete zvonky a píšťalky....

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;

Poskytne vám tři nejkratší dostupné sloty (tj. nejbližší cílové velikosti) v okně.




  1. MariaDB MaxScale Load Balancing on Docker:Deployment:Part One

  2. Nyní můžete používat Access s Microsoft Azure MFA!

  3. POUŽÍVEJTE HINT a DISABLE_OPTIMIZED_NESTED_LOOP

  4. Je ovladač MariaDB JDBC ovlivněn zranitelností Log4j?