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;
    

    ウィンドウ内で使用可能な最短の3つのスロット(つまり、ターゲットサイズに最も近い)が表示されます。




    1. MySQLを使用したC#-エラー:接続を開こうとすると、GUIDに4つのダッシュが付いた32桁の数字が含まれる必要があります

    2. Fedora12でMySQLリレーショナルデータベースを使用する

    3. nvarcharに改行を正しく挿入する方法

    4. Jsonはmysql結果セット全体をエンコードします