2015-07-10 60 views
2

我有以下表,其中預定可製成MySQL查詢表得到的開始和結束日期之間的數據

CREATE TABLE booking (
    bookingID INT UNSIGNED NOT NULL AUTO_INCREMENT, 
    customerID INT, 
    runID INT, 
    startDate DATETIME, 
    endDate DATETIME, 
    dateBookedOn TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
     PRIMARY KEY (bookingID), 
     INDEX idx_start (startDate), 
     INDEX idx_end (endDate), 
     FOREIGN KEY (runID) REFERENCES RUn(RunID), 
     FOREIGN KEY (customerID) REFERENCES customer(CustomerID) 
) 

然後,我有一個運行表

CREATE TABLE run 
(
    RunID INT UNSIGNED NOT NULL AUTO_INCREMENT, 
    RunName VARCHAR(15), 
    PricePerNight DECIMAL(3,2), 
    primary key (RunID) 
); 

我需要查詢表來檢索在開始和結束時間之間未被佔用的所有runID。

我知道我可以使用以下查詢來檢索兩個日期之間的runID。

select runID 
from booking 
where startDate >= '10/07/2015' 
and endDate <= 15/07/2015; 

我主要是掙扎的架構來檢索空閒的運行,所以我可以兩個日期,也許一個布爾值之間查看可用的運行?有什麼建議麼。

+0

您是否需要計算指定日期之間的運行ID? –

+0

什麼構成'未佔領'? – bowlturner

+0

@bowlturner未被佔用將是在開始和結束日期之間未預訂的運行。所以結果集將顯示可用於新預訂的房間。 – nwa

回答

1

假設你正在尋找沒有這些日期間預訂的運行,你可以使用not in運營商與給定的查詢作爲子查詢:

SELECT * 
FROM run 
WHERE run_id NOT IN (SELECT runID 
         FROM booking 
         WHERE startDate >= '10/07/2015' AND 
          endDate <= '15/07/2015'); 
0

下面的代碼會顯示你的房間是不是在此期間全部預訂

select run.runID 
from run left join booking b on b.runID = run.runID 
where startDate >= '10/07/2015' 
and endDate <= 15/07/2015 
and b.runID is null; 
相關問題