簡體   English   中英

使用if條件返回查詢結果

[英]Return query result with if condition

我有一些像這樣的表結構。

table 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_day列中, check_incheck_out用於表示客人在該日期無法辦理登機手續或在該日期無法辦理退房手續或無法在該日期辦理入住和退房手續。 0表示客人可以辦理入住或退房,但值1表示客人無法辦理入住或退房手續。

這是if條件:

  1. 如果我在2017-03-27辦理登機手續並在2017-03-28退房,並且欄目check_incheck_out在該日期為0 ,我想在property_id 5中顯示所有房間。
  2. 如果我在2017-03-27辦理登機手續並於2017-03-28退房,2017-03-27欄中的check_in值為1 ,我不想顯示所有房間。
  3. 如果我在2017-03-27辦理登機手續並於2017-03-28退房,2017-03-28欄的check_out值為1 ,我也不想顯示所有房間。
  4. 如果我在2017-03-27辦理登機手續並於2017-03-29退房,並且2017-03-28欄中的check_incheck_out值為1 ,我想顯示所有房間。
  5. 如果我在2017-03-27辦理登機手續並於2017-03-29退房,並且2017-03-28欄中的check_incheck_out值為0 ,我還想顯示所有房間。

這是條件號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

這是一個簡單的查詢,因為我不知道如果條件有問題的話。

請有人幫我這樣做。 謝謝。

請使用mysql CASE ... THEN ... END語句來獲得結果

http://www.mysqltutorial.org/mysql-case-statement/

IF() mysql語法如下:

IF(表達式,真,假);

您可以創建如下示例的語句。 我沒有測試過,但是如果有效,那就好了。 如果您找到了達到理想結果的最佳方法,您可以重新考慮它。 我沒有將check_incheck_out的條件包含在值1和0中,因為它們令人困惑並導致我不知道(在我理解你的條件的情況下),但如果你堅持,你可以添加它們:

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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM