使用连接两次检索数据

时间:2014-05-09 19:16:42

标签: php mysql sql zen-cart

我有以下两个MySQL查询。

$ delivery_id =

    select c.countries_id 
           from orders o
           LEFT JOIN countries c
           ON c.countries_name = o.delivery_country
           where o.orders_id = 1208;

$ billing_id =

    select c.countries_id 
           from orders o
           LEFT JOIN countries c
           ON c.countries_name = o.billing_country
           where o.orders_id = 1208;

将结果放入变量(PHP)中。我想知道的是,有没有办法将这两个查询组合成一个单一的查询而不是两次运行它。 (这是使用ZenCart的查询工厂($db->Execute),其中结果将被放入fields数组并被调用。

有关表格的信息:orders中的每个订单都会包含一个结算地址和送达地址,并在相应的字段billing_countrydelivery_country中找到国家/地区名称。但是,并非所有订单都包含送货地址。如何将这两者合并为一个查询?我知道我可以使用某种LEFT JOIN,但我不确定如何编写它。

2 个答案:

答案 0 :(得分:3)

您可以使用不同的别名加入countries表两次:

select 
    c1.countries_id AS delivering_id,
    c2.countries_id AS billing_id
from orders o
LEFT JOIN countries c1
     ON c1.countries_name = o.delivery_country
LEFT JOIN countries c2
     ON c2.countries_name = o.billing_country
where o.orders_id = 1208;

答案 1 :(得分:2)

使用union运算符as,

 select c.countries_id 
           from orders o
           LEFT JOIN countries c
           ON c.countries_name = o.delivery_country
           where o.orders_id = 1208
 UNION

 select c.countries_id 
           from orders o
           LEFT JOIN countries c
           ON c.countries_name = o.billing_country
           where o.orders_id = 1208;