2017-01-30 201 views
1

我有一些像這樣的表結構。返回查詢結果如果條件

property_day

propday_id | date  | property_id | check_in | check_out 
------------------------------------------------------ 
1   | 2017-03-26 | 5   | 0  | 0 
2   | 2017-03-27 | 5   | 0  | 0 
3   | 2017-03-28 | 5   | 0  | 0 
4   | 2017-03-29 | 5   | 0  | 0 

rooms

room_id | name  | property_id 
---------------------------- 
1  | Deluxe | 5 
2  | Superior | 5 
3  | Executive | 5 

我想告訴所有的房間有,如果內部查詢條件。我顯示與日期檢查和日期退房的房間。

在表列property_dayCHECK_INCHECK_OUT用於指示客人不能檢查在該日期或不能檢查出在該日期或無法簽入和簽出在那個日期。價值表示客人可以入住或退房,但價值表示客人無法辦理入住或退房手續。

這是如果條件:

  1. 如果我檢查在2017年3月27日和check_in列檢查出2017年3月28日和價值,check_out是在該日期我想要顯示property_id的所有房間。
  2. 如果我在2017-03-27檢查並檢查了2017-03-28和價值列check_in在2017-03-27是,我不想顯示所有房間。
  3. 如果我在2017-03-27檢查並在2017-03-28上查看,並在2017-03-28列check_out的值爲,我也不想顯示所有房間。
  4. 如果我在2017-03-27檢查並檢查了2017-03-29,並在2017-03-28列check_incheck_out的值爲,我想顯示所有房間。
  5. 如果我在2017-03-27登記入住並在2017-03-29結賬並在2017年3月28日的價格列check_incheck_out是,我也想顯示所有房間。

這是條件數1表結構:

propday_id | date  | property_id | check_in | check_out 
------------------------------------------------------ 
1   | 2017-03-26 | 5   | 0  | 0 
2   | 2017-03-27 | 5   | 0  | 0 
3   | 2017-03-28 | 5   | 0  | 0 
4   | 2017-03-29 | 5   | 0  | 0 

這是條件數2表結構:

propday_id | date  | property_id | check_in | check_out 
------------------------------------------------------ 
1   | 2017-03-26 | 5   | 0  | 0 
2   | 2017-03-27 | 5   | 1  | 0 
3   | 2017-03-28 | 5   | 0  | 0 
4   | 2017-03-29 | 5   | 0  | 0 

這是條件數3表結構:

propday_id | date  | property_id | check_in | check_out 
------------------------------------------------------ 
1   | 2017-03-26 | 5   | 0  | 0 
2   | 2017-03-27 | 5   | 0  | 0 
3   | 2017-03-28 | 5   | 0  | 1 
4   | 2017-03-29 | 5   | 0  | 0 

這是表結構對於條件數4:

propday_id | date  | property_id | check_in | check_out 
------------------------------------------------------ 
1   | 2017-03-26 | 5   | 0  | 0 
2   | 2017-03-27 | 5   | 0  | 0 
3   | 2017-03-28 | 5   | 1  | 1 
4   | 2017-03-29 | 5   | 0  | 0 

這是條件數5表結構:

propday_id | date  | property_id | check_in | check_out 
------------------------------------------------------ 
1   | 2017-03-26 | 5   | 0  | 0 
2   | 2017-03-27 | 5   | 0  | 0 
3   | 2017-03-28 | 5   | 0  | 0 
4   | 2017-03-29 | 5   | 0  | 0 

這是我已經嘗試,但沒有給出結果,我想要的查詢。

SELECT p.*, r.* 
FROM property_day p 
JOIN rooms r on p.property_id = r.property_id 
WHERE p.property_id = 5 AND p.check_in = 0 OR p.check_out = 0 

這是簡單的查詢,因爲我不知道如果條件,使一些查詢。

請任何人都幫我做到這一點。謝謝。

+0

請向我們展示查詢所需的輸出。 –

+0

我只想在這個條件下顯示房間的房間名稱。 @TimBiegeleisen – Antonio

+0

'選擇P檔。*,R * FROM property_day p JOIN室R ON p.property_id = r.property_id WHERE p.check_in = 0或p.check_out = 0' –

回答

0

IF() MySQL的語法,就如同:

IF(expression , true, false);

您可以創建一個如下例所示的語句。我沒有測試過它,但如果它有效,那麼很好。如果你想出了一個最佳的結果,你可以重新編寫它。我並沒有包括的check_incheck_out爲值1和0的條件,因爲他們是混亂,結果我不知道(我理解你,如果條件POV),但如果你堅持,你可以將它們添加:

SELECT p.property_id, 
    IF(p.date = '2017-03-27' OR p.date = '2017-03-28', 
     IF(p.property_id = 5, 
      r.name, 
      '---' 
     ), 
     IF(p.date = '2017-03-29', 
      r.name, 
      '---' 
     ) 
    ) AS your_result 
FROM property_day p 
JOIN rooms r on p.property_id = r.property_id 
WHERE p.date >= '2017-03-27' AND p.date <= '2017-03-29'