[英]PHP: combine two queries into one or two query results into a single array?
[英]Want to get results of two queries in one single query by merging these queries
所以,我有两个表,一个是 A(order_id, order_group_id, name),第二个是 B(order_group_id, paid)。
表A有几条记录:
order_id | order_group_id | name
----------------------------------
1 | 0 | A
----------------------------------
2 | 14 | B
----------------------------------
3 | 0 | C
----------------------------------
4 | 15 | D
表B有几条记录:
order_group_id | paid
--------------------------
14 | 0
--------------------------
15 | 1
现在我正在运行这两个查询:
SELECT order_id FROM A WHERE order_group_id = 0
和
SELECT d.order_id FROM A as d, B as e WHERE d.order_group_id = e.order_group_id AND e.paid = 0
第一个查询给出order_id
1
和3
。
第二个查询给出order_id
2
。
那么,现在如何在一个查询中获得这两个查询的结果,这些order_id
也应该按升序排列。
您可以使用LEFT JOIN
实现它
此查询将返回所有paid is 0
或order_group_id is 0
的记录
SELECT order_id, e.paid, d.order_group_id FROM A as d
LEFT JOIN B as e ON d.order_group_id = e.order_group_id
WHERE e.paid = 0 OR d.order_group_id = 0
在codeignitor
中,您可以通过以下方式实现
$query = $this->select('SELECT order_id, e.paid, d.order_group_id')->from('A as d')->join('B as e','d.order_group_id = e.order_group_id','LEFT')->where('e.paid = 0 OR d.order_group_id = 0')->get();
演示: http ://sqlfiddle.com/#!9/2b82f9/8
SELECT order_id FROM A WHERE order_group_id = 0
union
SELECT d.order_id FROM A as d, B as e WHERE d.order_group_id = e.order_group_id AND e.paid = 0
您可以使用 INNER JOIN 关联两个或多个表。 并使用 ORDER BY (column) ASC/DESC 进行升序或降序
SELECT order_id FROM A as d INNER JOIN B as e
ON d.order_group_id = e.order_group_id
WHERE d.order_group_id = 0 AND e.paid = 0
ORDER BY order_id ASC
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.