0

mysql と php を使用して日付と時刻の競合を確認したい。

私のタイムスタンプは、次のようなphpコードを使用してフォーマットされています。

$timestamp_start = date("Y-m-d H:i:s", mktime(date("H", strtotime($start_time)), date("i", strtotime($start_time)), 0, $date[0], $date[1], $date[2]));
$timestamp_end = date("Y-m-d H:i:s", mktime(date("H", strtotime($end_time)), date("i", strtotime($end_time)), 0, $date[0], $date[1], $date[2]));

そして、以下のようにmysqlチェックを行います:

$sql = "SELECT * FROM `$info[table]` WHERE ((`timestamp_start` BETWEEN '$timestamp_start' AND '$timestamp_end') OR (`timestamp_end` BETWEEN '$timestamp_start' AND '$timestamp_end'))";

ここから取得したコードはどれですか! ハハ。

問題は、ルームが 2013 年 10 月 31 日の午前 8 時から午後 5 時までにスケジュールされていて、他の誰かが 2013 年 10 月 31 日午後 5 時から午後 9 時までにスケジュールしようとすると、ルームが既に使用されているというメッセージが表示されます。イベント間に少なくとも 30 分の間隔が必要だったので、最初は気にしませんでしたが、上司は、部屋は連続してスケジュールできるはずだと言いました。

05:00 PM までずっと予約されている場合、誰かが 05:00 PM に部屋をリクエストできるように SQL ステートメントを変更するにはどうすればよいですか?

これはうまくいくようです

$sql = "SELECT * FROM `$info[table]` WHERE `approved`='true' AND (`timestamp_start` < '$timestamp_end' AND `timestamp_end` > '$timestamp_start')";
4

2 に答える 2

1

BETWEEN包含操作です。

 foo BETWEEN bar AND baz

と同等です

 (foo >= bar) AND (foo <= baz)

カットオフ時間の「重複」を許可したいので、 `BETWEEN 操作を捨てて、より退屈な書き込みに行く必要があります

 (foo >= bar) AND (foo < baz)
                       ^--- non-inclusive
于 2013-10-24T17:06:00.080 に答える
0

ここで尋ねられた別の質問でこれを見つけました:

$sql = "SELECT * FROM `$info[table]` WHERE `approved`='true' AND (`timestamp_start` < '$timestamp_end' AND `timestamp_end` > '$timestamp_start')";

そして、私が行った限られたテストを使用して動作しているようです.

于 2013-10-24T17:40:49.217 に答える