5

私は、管理者が駐車場を利用できるようにしたいときに日付を挿入する機能を管理者に与える必要があるスクリプトに取り組んでいます。管理者は範囲内の日付を挿入します。

MySQLに日付を保存するための最良の方法を解決するのに苦労しています。

AVAILABLE_FROM_DATE2つの列を使用して日付を保存する必要がありAVAILABLE_UNTIL_DATEますか?

PLID    AVAILABLE_FROM DATE         AVAILABLE_UNTIL_DATE
1       2012-04-01                  2012-04-03
1       2012-04-05                  2012-04-15
2       2012-04-21                  2012-04-30

または、単一の列AVAILABLE_DATEを使用して、管理者が選択した範囲を、範囲間の各日付の新しい行に保存する必要がありますか?

[編集開始]
上記の単一の列を使用することは、日付を単一の列に結合または分割しないことを意味します。実際には、以下のように単一の列を持つ単一の行に日付を格納することを意味します。

PLID    AVAILABLE_DATE
1       2012-04-01
1       2012-04-02
1       2012-04-03

保存したいすべての利用可能な日付についても同様です。
[編集終了]

基本的に、管理者は駐車場が利用可能な日付範囲を挿入し、ユーザーがその範囲内のスロットを探している場合はメンバーがそのスロットを選択できるようにします。

または、これを行うためのより良い、より簡単な方法はありますか?

現在、範囲に別々の列を使用する最初の方法を使用しようとしていますが、範囲内の駐車場を探すときに目的の結果を得るのに問題があります。

[編集開始]

SELECT * FROM `parking_lot_dates`
WHERE (available_from_date BETWEEN '2012-04-22' AND '2012-04-30'
AND (available_until_date BETWEEN '2012-04-22' AND '2012-04-30'))

上記の行で次のクエリを使用すると、空が返されます。PLID2を持つ最後の行を返すようにします
[編集終了]

前もって感謝します。

4

4 に答える 4

6

クエリを使用したEDITに関しては、ロジックが裏返しになっています。次のように、チェックしている各日付が範囲内にあるかどうかを比較する必要がありますBETWEEN available_from_date and available_until_date

SELECT * FROM `parking_lot_dates`
WHERE
(
        '2012-04-22' BETWEEN available_from_date AND available_until_date
    AND '2012-04-30' BETWEEN available_from_date AND available_until_date
)

デモ:http ://www.sqlfiddle.com/#!2 / 911a3 / 2

編集:部分的な範囲の一致を許可する場合は、両方のタイプのロジックが必要になります。つまり、駐車場は4-22から4-27で利用可能であり、4-23から4-28である必要があります。 。4-23から4-27の日付には使用できますが、4-28には使用できません。

于 2012-04-21T18:56:12.280 に答える
3

なぜそんなに複雑にするのですか?

SELECT *
FROM `parking_lot_dates`
WHERE available_from_date <= '2012-04-22'
AND available_until_date >= '2012-04-30';
于 2012-04-21T19:03:18.087 に答える
0

個人的には、特定の日付を検索するために、開始時刻と終了時刻の2つの列を設定する方がよいと感じています。または、それを見るだけでも簡単に思えます。

于 2012-04-21T18:48:34.423 に答える
0

これらの日付を格納するために1つの列を使用することは、データベースの観点からは不適切な設計です(正規化されていません)。結果を簡単に取得でき、1つの列から情報を抽出すると、何らかの分割を行う必要があるため、2つの列を使用することをお勧めします。それは単にエレガントではなく、要件が変更されたときにうまく動作しません。

于 2012-04-21T18:59:41.173 に答える