これは私のクエリです。必要に応じて値を編集してください
$sql = "SELECT COUNT(*) as num FROM meeting_room_bookings
WHERE
(
(startdate < start_at AND startdate > start_at)
OR
(startdate > start_at AND enddate < end_at)
)
AND
meeting_room_id = whatever_id i was on about at the time :P";
データをサニタイズする場合は、開始日と終了日の値を「?」に置き換える必要があります。そして、このようなことをします->
$sql = "SELECT COUNT(*) as num FROM meeting_room_bookings
WHERE
(
(? < start_at AND ? > start_at)
OR
(? > start_at AND ? < end_at)
)
AND
meeting_room_id = ?";
$result = p4a_db::singleton()->fetchRow($sql, array($date, $date, $date, $dateend, $merono));
さらに進むには:
$sql = "SELECT COUNT(*) as num FROM meeting_room_bookings
WHERE
(
( start_at >= ? AND start_at <= ? )
OR
( start_at <= ? AND end_at >= ? )
OR
( end_at >= ? AND end_at <= ? )
OR
( ? >= ? )
)
AND
meeting_room_id = ?";
$result = p4a_db::singleton()->fetchRow( $sql, array( $date, $dateend, $date, $dateend, $date, $dateend, $date, $dateend, $merono ) );
この方法では、フィールドの周囲のフィールドの外側のフィールド内に日付が入らないようにするか、その領域からのその他の可能性を許可しません (図を参照)。
|| |-----------| || first booking
|-----| ok
|---| fails
|----| fails
|----| fails
完全な説明が必要な場合は、このトピックに移動してください
エラーメッセージを実行するときは、 if else も実行する必要があるため、次の構文で作業を行う必要があります。
if ( 0 == $result["num"] )
{
p4a_db::singleton()->query( "INSERT INTO meeting_room_bookings ( start_at, end_at, meeting_room_id, tennant_id, centre_id )
VALUES
( ?, ?, ?, ?, ? )", array( $date, $dateend, $merono, $row['tennant_id'], $centreRow['id'] ) );
return true;
}
else
{
P4A::singleton()->messageError("The selected times conflict with another booking. Please select another time or meeting room!");
}
センター ID とテナント ID のフィールドは無視してください (これらを使用しない場合)。これらのフィールドは、予約が正しいテナントと正しい会議室に設定されるようにするためのものです。必要に応じてこれを使用し、必要なものを置き換えてください。
ところで、私はp4aアプリケーションフレームワークを使用しているのでP4A::singleton()->messageError
、phpエラーメッセージmoboberに置き換える必要があります