Php 返回查询结果,并在查询中使用union
我在数据库中有3个这样的表 表Php 返回查询结果,并在查询中使用union,php,mysql,codeigniter,codeigniter-3,Php,Mysql,Codeigniter,Codeigniter 3,我在数据库中有3个这样的表 表可用性 availability_id | date | price | room_id | closed ------------------------------------------------------- 1 | 2017-01-24 | 75 | 8 | 0 2 | 2017-01-24 | 95 | 9 | 0 3 |
可用性
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\u 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_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
表package\u 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_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)
选择一个价格
从可用性a
其中a.closed=0,a.date>='2017-01-24'和a.date='2017-01-24'和o.date='2017-01-24'和p.date您在评论中询问,如果关闭的记录为1,则您不想从表中获取任何记录。您可以进行子查询以检查是否有任何不需要的值。
这里有一个例子
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) and a.closed NOT IN (select closed FROM availability WHERE closed = 1 AND date >= '2017-01-24' AND date <= '2017-01-26')
UNION
SELECT o.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) and o.closed NOT IN (select closed FROM offer_day WHERE closed = 1 AND date >= '2017-01-24' AND date <= '2017-01-26')
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) and p.closed NOT IN (select closed FROM package_day WHERE closed = 1 AND date >= '2017-01-24' AND date <= '2017-01-26')
选择一个价格
从可用性a
其中a.closed=0,a.date>='2017-01-24'和a.date='2017-01-24'和date='2017-01-24'和o.date='2017-01-24'和date='2017-01-24'和p.date='2017-01-24'和date如果您不想要房间,可以使用Blow查询
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) and a.room_id NOT IN (select room_id FROM availability WHERE closed = 1 AND date >= '2017-01-24' AND date <= '2017-01-26')
UNION
SELECT o.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) and o.room_id NOT IN (select room_id FROM offer_day WHERE closed = 1 AND date >= '2017-01-24' AND date <= '2017-01-26')
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) and p.room_id NOT IN (select room_id FROM package_day WHERE closed = 1 AND date >= '2017-01-24' AND date <= '2017-01-26')
选择一个价格
从可用性a
其中a.closed=0和a.date>='2017-01-24'和a.date='2017-01-24'和date='2017-01-24'和o.date='2017-01-24'和date='2017-01-24'和p.date='2017-01-24'和日期您有条件->x.closed=0,在您的查询中,您将获得所有已关闭的记录=0ya我知道。但是,我想在我输入的日期范围内,如果Column closed中有值1,我不想显示所有记录@Rafaelshkembi您的查询有什么问题?输出是什么?您希望得到什么输出?如果Column closed中有值1,我不想显示所有记录@没有人吗?您想要一个空的结果集?如果有任何数据o.closed=1,则可能不起作用,然后不要在给定数据中带来任何单个数据事件o.closed=0其他值range@krishnpatel是的,我知道,但OP询问说,他希望获取closed=0的所有记录,但如果表中存在closed=1的记录,则不获取任何结果。我已经放弃了子查询中的日期过滤器,我将更新我的answer@Antonio现在我明白了。请稍等几分钟,我会更新我的ansewer@RafaelShkembi你现在可以更新你的ans了吗?他想知道你的答案了吗?我只是把Column offer\u id改为plan\u id,并把offer\u id添加为新Column。请再看看我的问题。我已经给出了一个想法,你们可以用自己的方式提出新的问题