Php 对ZenCart的通讯簿条目执行联接

Php 对ZenCart的通讯簿条目执行联接,php,mysql,join,zen-cart,Php,Mysql,Join,Zen Cart,我有以下代码: $referrers_query = select c.customers_id, c.customers_firstname, c.customers_lastname, c.customers_email_address, c.customers_telephone, a.entry_street_address, a.entry_city, a.entry_state, a.entry_country_id, n.countries_name, a.entry_zo

我有以下代码:

$referrers_query = 
select c.customers_id, c.customers_firstname, c.customers_lastname, 
c.customers_email_address, c.customers_telephone, a.entry_street_address, 
a.entry_city, a.entry_state, a.entry_country_id, n.countries_name, 
a.entry_zone_id, a.entry_postcode, r.referrer_customers_id, 
r.referrer_key, r.referrer_homepage, r.referrer_approved, 
r.referrer_banned, r.referrer_commission from  customers as c,  
address_book  as a, referrers  as r, countries as n  
where a.entry_country_id = n.countries_id and c.customers_id = r.referrer_customers_id 
and a.address_book_id = c.customers_default_address_id  order by c.customers_lastname;
我想做的是,我想嵌套连接,而不是使WHERE子句连接

上面提到了五个数据库表。 客户、地址簿、推荐人、国家/地区


但我不知道从哪里开始。这方面的主要问题是使用上面的语句,我似乎从select中丢失了一些记录。这是因为某些记录使用的“区域id”=0。解决此问题的方法是简单地为0创建一个空白记录,但除此之外,我可以使用联接来解决此问题吗?

使用显式联接编写的查询:

如果存在匹配项,还希望从zones表中获取信息,则需要添加一个左连接,如下所示:

SELECT c.customers_id, c.customers_firstname, c.customers_lastname, 
    c.customers_email_address, c.customers_telephone, a.entry_street_address, 
    a.entry_city, a.entry_state, a.entry_country_id, n.countries_name, 
    a.entry_zone_id, a.entry_postcode, r.referrer_customers_id, 
    r.referrer_key, r.referrer_homepage, r.referrer_approved, 
    r.referrer_banned, r.referrer_commission
FROM customers AS c
    JOIN referrers AS r ON (c.customers_id = r.referrer_customers_id)
    JOIN address_book AS a ON (a.address_book_id = c.customers_default_address_id)
    JOIN countries AS n ON (a.entry_country_id = n.countries_id)
    LEFT JOIN {zones table name} AS z ON (z.{zones id column name} = a.entry_zone_id)
ORDER BY c.customers_lastname

并将要选择的列添加到查询的顶部。左连接总是从左表返回第一个列出的结果,如果右表中没有匹配项,它会为右表的列返回空值。

是否可以重新格式化该查询以使其实际可读?也许可以指出哪一行是502行?也许尝试var_dump而不是echo?完全改变了整个问题,但我也将尝试var_dump方法。非常感谢。分区的表名实际上是zones,ID的列是zone_ID,但我设法找到了。这很好用。
SELECT c.customers_id, c.customers_firstname, c.customers_lastname, 
    c.customers_email_address, c.customers_telephone, a.entry_street_address, 
    a.entry_city, a.entry_state, a.entry_country_id, n.countries_name, 
    a.entry_zone_id, a.entry_postcode, r.referrer_customers_id, 
    r.referrer_key, r.referrer_homepage, r.referrer_approved, 
    r.referrer_banned, r.referrer_commission
FROM customers AS c
    JOIN referrers AS r ON (c.customers_id = r.referrer_customers_id)
    JOIN address_book AS a ON (a.address_book_id = c.customers_default_address_id)
    JOIN countries AS n ON (a.entry_country_id = n.countries_id)
    LEFT JOIN {zones table name} AS z ON (z.{zones id column name} = a.entry_zone_id)
ORDER BY c.customers_lastname