跳至內容
Astera Technology

一個預約本身的人數是否已超出房間容量?

逐筆比較已確認人數與所選房間上限,找出要換房或調整安排的預約。

先訂清楚要判斷甚麼,再準備資料

只有一個預約也可能超出容量,查時段衝突未必找得到。把每筆已確認人數與該房上限比較。這是單一預約的檢查,與同時使用房間的人數不同;不能把全日不同時段的人數合計後稱為超額。

以下全部是假設資料。請在新的 SQLite 測試資料庫建立各表,再執行唯讀查詢。數量以件計,金額以港元的分作整數儲存;顯示港元時除以 100。

假設輸入節錄;完整相關資料見下方 SQL
編號房間編號預約人數狀態代碼
B1R15confirmed
B2R14confirmed
B3R12confirmed
B4R25confirmed
B5R21cancelled
下載可編輯 CSV ↓
可直接執行的完整假設資料(SQLite)
CREATE TABLE rooms(id TEXT PRIMARY KEY, capacity INTEGER);
CREATE TABLE bookings(id TEXT PRIMARY KEY, room_id TEXT, starts_at TEXT, ends_at TEXT, seats INTEGER, status TEXT);
CREATE TABLE waitlist(id TEXT PRIMARY KEY, booking_id TEXT, requested_seats INTEGER, joined_at TEXT);
INSERT INTO rooms VALUES ('R1',8),('R2',4);
INSERT INTO bookings VALUES ('B1','R1','2026-10-10 09:00','2026-10-10 10:00',5,'confirmed'),('B2','R1','2026-10-10 09:30','2026-10-10 10:30',4,'confirmed'),('B3','R1','2026-10-10 10:30','2026-10-10 11:30',2,'confirmed'),('B4','R2','2026-10-10 12:00','2026-10-10 13:00',5,'confirmed'),('B5','R2','2026-10-10 12:00','2026-10-10 13:00',1,'cancelled');
INSERT INTO waitlist VALUES ('W1','B3',7,'2026-10-08 09:00'),('W2','B3',2,'2026-10-08 10:00'),('W3','B3',1,'2026-10-08 11:00');

執行查詢,核對實際結果

SQLite 唯讀查詢
SELECT b.id,b.room_id,b.seats,r.capacity,b.seats-r.capacity AS excess_seats
FROM bookings b JOIN rooms r ON r.id=b.room_id
WHERE b.status='confirmed' AND b.seats>r.capacity ORDER BY b.id;
以上 SQLite 假設資料的查詢結果
編號房間編號預約人數房間上限超額人數
B4R2541
下載可編輯 CSV ↓

B4 在 R2 預約 5 人,但房間上限只有 4 人,多了 1 人。B1 和 B2 單獨看都未超過 R1 容量,卻有時段衝突,須用另一項檢查處理。先確認實際人數及合適房間,再改預約。

按資料範圍使用結果

容量是本例的系統設定,不代表法定場地上限。接不到房間的紀錄需另外查核,內連接不會列出。若多人可共用一節,須另計該時段的總人數。

本例的建表、資料及結果已在 SQLite 執行。套用時先在系統測試副本調整欄位及狀態規則,再與流程負責人核對預期結果。其他資料庫平台未經測試。

相關資源