2017-01-30 206 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'