使用if条件返回查询结果

时间:2017-01-30 05:10:57

标签: php mysql codeigniter codeigniter-3

我有一些像这样的表结构。

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

我想用if条件查询所有房间。我出示了带日期入住和退房日期的房间。

在表格property_day check_in check_out 用于表示客人无法在该日期办理登机手续或无法在该日期退房或无法办理登机手续并在那个日期退房。值 0 表示客人可以办理入住或退房手续但值 1 表示客人无法办理入住或退房手续。

这是if条件:

  1. 如果我在2017-03-27办理登机手续并于2017-03-28退房,且check_in栏中的值和check_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 ,我也想展示所有空间。
  6. 这是条件号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
    

    这是一个简单的查询,因为我不知道如果条件有问题,可以进行一些查询。

    请有人帮我这样做。谢谢。

2 个答案:

答案 0 :(得分:0)

请使用mysql CASE ... THEN ... END语句获取结果

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

答案 1 :(得分:0)

IF() mysql语法如下:

  

IF(expression , true, false);

您可以创建如下示例的语句。我没有测试过,但是如果有效,那就好了。如果您找到了达到理想结果的最佳方法,您可以重新考虑它。我没有将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'