2011-04-11 48 views
-1

我很困惑我如何才能返回尚未預訂的座位。僅檢索可用座位?

我已經給出

商店2個場地在同一表座位信息的表模式(每個50個座位)

我然後有一個SeatBooking表它接受seatNumber場館和預訂號碼,使它獨一無二的表現。

這個想法很多是:創建一個名爲SeatStatus的字段,其布爾值數據類型設置爲True(如果採用)和False(如果可用)。然後,查詢返回所有SeatStatus = false的位置。

這可以在這種情況下完成嗎?

回答

0

這不是特定於你正在做的語言,但我會使用SQL LEFT JOIN來做到這一點。

基本上這種類型的加入表示您知道左側存在(在這種情況下爲座位表),但右側(預訂信息)可能不存在,因此您可能會得到空值。左側將座位信息表加入座位預訂表,選擇您要查找信息的性能。作爲最後的條件,檢查預訂信息是否爲空,因爲如果是,座位尚未預留。

如果您的SQL表按照他們應該的方式進行了優化,那麼速度會非常快,您將得到一個結果,只有無保留的席位,因此您不需要在代碼中執行任何篩選,並且可以擁有SQL服務器爲你做了繁重的工作。 (這通常是最有效的方法)

您需要快速完成此操作的索引是預訂信息表上的座位號和性能。

下面是這個查詢的一般形式:

SELECT seat.* FROM seating seat LEFT JOIN bookings book ON seat.number = book.seat_number,book.performance = 'SOME PERFORMANCE ID' WHERE seat.venue = 'SOME VENUE' AND book.performance is null; 

試試這個沒有'AND book.performance是空的第一個,並選擇預訂表以及確保你得到的所有數據,而且,重要的是,每個座位只有一排。

+0

此外,您可能希望確保booking.seat_number和booking.performance是唯一索引或主鍵。這樣可以避免重複預訂同一個席位,以確保在查詢過程中不會出現重複的行。 – SplinterReality 2011-04-11 07:12:35