sql >> Databasteknik >  >> RDS >> Mysql

MySQL / PHP - Hitta tillgängliga tidsluckor

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;

du behöver bara ange värden för your_duration (heltal), start_of_search_window (datum tid) och end_of_search_window (datum tid).

Och om du vill ha bells and whistles...

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;

Ger dig de tre kortaste tillgängliga platserna (dvs. närmast målstorleken) inom fönstret.




  1. Använda kryptering för att stärka PostgreSQL-databassäkerheten

  2. Där resultatuppsättningen lagras när du arbetar med jdbc och oracle-drivrutinen

  3. Proaktiva SQL Server Health Checks, Del 5:Väntestatistik

  4. Hur ställer jag in MySQL tillfälligt till skrivskyddad genom kommandoraden?