sql >> データベース >  >> RDS >> Mysql

予約システムで次に利用可能な日付を見つけるためのSQLクエリのヘルプ

    以下はあなたを動かすはずです。 「Current_Date()」関数のサンプルを、予約の開始日や外出日数に合わせて調整することをお勧めします。...

    これは、クエリでMySQLインライン変数を使用します。内部クエリは、開始日(current_date())に基づく予約(@r)変数の単純な準備であり、アイテムテーブルに結合します。結合句を実行しないと、アイテムごとに1つの日付が取得されます。私のシナリオでは、30日間の外出のみを検討しているため、最初の30アイテムの制限を適用しました。十分なレコードを提供する以外の根拠はないので、30レコードの一時テーブルを作成する必要はありません(または、外出する日数は何日でも)。これにより、エイリアスクエリ「JustDates」が作成され、単一の列「OpenDate」が作成されます。これは、テストする日付範囲の基礎です。

    これはアイテムテーブルに結合されましたが、すべてのアイテムと比較して、日付ごとにデカルト座標を作成する条件はありません... WHERE句に従って、SKUが「ABC123」の天気のアイテムのみに関係します。 #sまたは100。これにより、300または3000(30日で10個のシリアルアイテム、または30日で100個のシリアルアイテム)が可能になります。

    これで、すべての個別のシリアル番号の「範囲」と空き状況を確認できる日数がわかったので、予約システムに対してクエリを実行できます。したがって、サブ選択を介して、指定された一致するSKU、シリアル番号、および予約で見つかった可能性のある日付に対してNOT INを使用して、指定されたOpenDateが見つからないもののみを保持します。私はあなたのテーブル構造をシミュレートし、いくつかのアイテム、複数のシリアル番号、および停滞した予約日の範囲を入れました、そしてそれは素晴らしい働きをします...

    明らかに、パフォーマンスのためにsku/serialのインデックスを確保します。私が行う可能性のある唯一の追加の変更は、予約に対してクエリを実行する場合です。終了日がクエリの問題の開始日より前であり、オプションで、開始日>検討中の最後の日付がない予約を除外します。あなたが何年にもわたってたくさんの予約をしているなら、誰が問題の日付範囲から何か古いもの、または将来の何かを気にします。

    select  items.sku,
            items.serial_number,
            JustDates.OpenDate
        from 
            ( SELECT 
                     @r:= date_add(@r, interval 1 day ) OpenDate
                FROM 
                     (select @r := current_date()) vars,
                    items limit 30 ) JustDates,
            items
        where 
                sku = "ABC123"
            and sku not in ( select sku from Reservations
                                where items.sku = reservations.sku
                                  and items.serial_number = reservations.serial_number
                                  and justDates.OpenDate >= reservations.start_date
                                  and justDates.OpenDate <= reservations.end_date )
        order by 
           items.serial_number,
           justDates.OpenDate
    


    1. MySQLでテーブルを作成するSQLクエリ

    2. ASCII()の例– MySQL

    3. PHPを使用する場合のMySQLとMySQLi

    4. SQLの結果をリストPythonに変換します