編集: ゴードンが投稿したクエリには問題があるようです。10 ~ 12 日の予約がある場合、午後 12 時以降のすべての予約は無効と見なされるようですが、午前 10 時より前のすべての予約は有効です。
すばやく簡単に考えた結果、次のクエリを作成することになりました。
SELECT serverip
FROM server
WHERE serverip NOT IN (SELECT serverip
FROM booking
WHERE startat >= datehere
AND expiresat <= datehere)
LIMIT 1;
予約テーブルに次のものが格納されているとします。
+-----------+-----------+----------+----------+-----------+
| bookingid | serverip | username | startat | expiresat |
+-----------+-----------+----------+----------+-----------+
| 1 | 127.0.0.1 | testuser | 10:00 | 12:00 |
+-----------+-----------+----------+----------+-----------+
ユーザーが予約のために次のデータを入力した場合:
startat = 9:59
expiresat = 12:01
彼らは私のチェックを簡単にバイパスして、保存された以前の予約に基づいて予約時間が利用可能かどうかを確認できます.
この問題をよりよく解決する方法について何かアドバイスはありますか?
ユーザーの入力を制限したくないし、特定のタイムスロットをハードコーディングすることは避けたいと思いますが、それが問題でなければ、私は自分が持っているものに固執します.
御時間ありがとうございます。