【发布时间】:2017-01-12 08:41:35
【问题描述】:
我在数据库中有 3 个这样的表
表availability
availability_id | date | price | room_id | closed
-------------------------------------------------------
1 | 2017-01-24 | 75 | 8 | 0
2 | 2017-01-24 | 95 | 9 | 0
3 | 2017-01-25 | 80 | 73 | 0
4 | 2017-01-25 | 70 | 65 | 0
5 | 2017-01-26 | 85 | 42 | 0
6 | 2017-01-26 | 65 | 21 | 0
表offer_day
plan_id | offer_id date | price | room_id | | closed
------------------------------------------------------------
1 | 12 | 2017-01-24 | 70 | 8 | 0
2 | 23 | 2017-01-24 | 75 | 9 | 0
3 | 12 | 2017-01-25 | 70 | 8 | 1
3 | 14 | 2017-01-25 | 70 | 8 | 0
4 | 34 | 2017-01-25 | 75 | 9 | 0
5 | 43 | 2017-01-25 | 80 | 73 | 0
6 | 54 | 2017-01-25 | 85 | 65 | 0
7 | 65 | 2017-01-26 | 75 | 42 | 0
8 | 44 | 2017-01-26 | 70 | 21 | 0
表package_day
package_id | date | price | room_id | closed
--------------------------------------------------
1 | 2017-01-24 | 120 | 8 | 0
2 | 2017-01-24 | 125 | 9 | 0
3 | 2017-01-25 | 135 | 73 | 0
4 | 2017-01-25 | 130 | 65 | 0
5 | 2017-01-26 | 125 | 42 | 0
5 | 2017-01-26 | 120 | 21 | 0
我有这样的查询:
SELECT a.price
FROM availability a
WHERE a.closed = 0 AND a.date >= '2017-01-24' AND a.date <= DATE_SUB('2017-01-26', INTERVAL 1 DAY)
UNION
SELECT 0.price
FROM offer_day o
WHERE o.closed = 0 AND o.date >= '2017-01-24' AND o.date <= DATE_SUB('2017-01-26', INTERVAL 1 DAY)
UNION
SELECT p.price
FROM package_day p
WHERE p.closed = 0 AND p.date >= '2017-01-24' AND p.date <= DATE_SUB('2017-01-26', INTERVAL 1 DAY)
如果我运行该查询,我将获得closed = 0 的所有行。正如您在表 offer_day 中看到的那样,closed 列中的值为 1。
如果同一 room_id 和同一 offer_id 中的列 close 中的任何行包含值 1,我不想显示结果。
例如,您可以在表 offer_day 中看到 room_id 8 有两个日期 '2017-01-24' 和 '2017-01-25' 以及两个 offer_id 12 和 14 在日期 '2017- 01-25' 在 closed 和 offer_id 8 中有 1。如果有任何行包含值 1,我不想显示 room_id 8 和 offer_id 12
我该怎么做?
谢谢。
【问题讨论】:
-
你有一个条件 -> x.closed = 0 ,在你的查询中你会得到所有已经关闭=0的记录
-
是的,我知道。但是,我希望在我输入的日期范围内,如果关闭列中的值为 1 我不想显示所有记录@RafaelShkembi
-
您的查询有什么问题?输出是什么?你期待什么输出?
-
如果coloumn中的值1,我不想显示所有记录关闭。 @shmosel
-
没有?你想要一个空的结果集?
标签: php mysql codeigniter codeigniter-3