0

予約された日付を保持するMysqlテーブルがあります(特定の休日のプロパティ用)。

例...

テーブル「listing_availability」

行...

availability_date (これは日付形式 2013-04-20 などを示します)

availability_bookable (はい/いいえで指定できます。"はい" = 予約の変更日であり、"利用可能" です。"いいえ" は、その日付で宿泊施設が予約されていることを意味します)

年内の他のすべての日付(「いいえ」を除く)は予約可能です。これらの日付はデータベースにはなく、予約された日付のみです。

私の質問は... Get Date関数を最初に呼び出すSQLステートメントを作成する必要があります(これが正しい用語かどうかはわかりません)

次に、"availability_date" WHERE "availability_bookable" = "No" から日付を削除します

これにより、年間の予約可能な物件の日付がわかります。

誰でも助けることができますか?

よろしくM

4

2 に答える 2

1

クエリをほぼ書き終えたようです。

SELECT availability_date FROM listing_availability
WHERE availability_bookable <> 'NO'
AND availability_date >= CURDATE()
AND YEAR(CURDATE()) = YEAR(availability_date)
于 2013-03-18T13:40:38.080 に答える
0

私は理解していると思います、そしてあなたは明らかに確認するでしょう。「availability_booking」にはいくつかのレコードが含まれていますが、1年の毎日ではなく、何かを持っている可能性のあるものだけがあり、すべてがコミットされているわけではありません。

したがって、指定された日付範囲内のすべての日付をシミュレートする必要があります...誰かがその期間内にパーティーを予約しようとしているので、4月1日から7月1日と言います。プロダクションテーブルを事前に入力する代わりに、4月27日がオープンで利用可能であるとは言えません...そのようなレコードは存在しないためです。

日付範囲の日のカレンダーをシミュレートするには、MySQL変数を使用してそれを実行し、必要な日付範囲をシミュレートするのに十分なレコードがある場合は、データベース内の「任意の」テーブルに結合できます。

select
      @myDate := DATE_ADD( @myDate, INTERVAL 1 DAY ) as DatesForAvailabilityCheck
   from
      ( select @myDate := '2013-03-31' ) as SQLVars,
      AnyTableThatHasEnoughRows
   limit
      120;

これにより、2013年4月1日から始まる日付のリストが表示されます(元の@myDateは開始日の1日前です。これは、フィールドの選択により4月1日までに1日が追加され、その後も制限が続くためです。 120日(または範囲ベースで探しているもの-30日、60、90、22など)。「AnyTableThatHasEnoughRows」は実際には「availability_booking」テーブルである可能性がありますが、行を含むテーブルとして使用しています。参加なしまたはwhere条件、取得するのに十分...120レコード。

これで、これを使用して、必要なテーブルに結合し、条件を適用できます。比較する日の完全なカレンダーを作成しました。最終的なクエリは異なる場合がありますが、これでほとんどの方法が得られるはずです。

select 
      JustDates.DatesForAvailabilityCheck,
   from
      ( select
              @myDate := DATE_ADD( @myDate, INTERVAL 1 DAY ) as DatesForAvailabilityCheck
           from
              ( select @myDate := '2013-03-31' ) as SQLVars,
              listing_availability
           limit
              120 ) JustDates
         LEFT JOIN availability_bookable 
            on JustDates.DatesForAvailabilityCheck = availability_bookable.availability_date
   where
         availability_bookable.availability_date IS NULL
      OR availability_bookable.availability_bookable = "Yes"

したがって、上記はサンプルカレンダーを使用し、可用性を確認します。そのような一致する日付が(IS NULLを介して)存在しない場合は、競合がないことを意味します。ただし、テーブルにレコードがある場合は、YESのレコードのみが必要であり、予約できます。ファイルのエントリはコミットされない可能性があり、使用可能な日付の結果クエリに含めることができます。

于 2013-03-18T13:56:32.603 に答える