PHP MySQL查询语句问题

问题描述:

我一直在试图修复这个PHP MySQL查询整个下午,我迷失了主意!以下查询工作!:PHP MySQL查询语句问题

$sql = "SELECT o.order_id, CONCAT(o.firstname, ' ', o.lastname) AS customer, o.shipping_code, o.total, o.channel, o.currency_code, o.currency_value, o.date_added, o.date_modified, c.image, 
     cg.name AS cgroup, CONCAT(o.payment_address_1, '<br>', o.payment_city, ', ', o.payment_zone, ' ', o.payment_postcode) AS address, o.telephone AS phone, o.email AS email,    
     (SELECT os.name FROM " . DB_PREFIX . "order_status os WHERE os.order_status_id = o.order_status_id AND os.language_id = '" . (int)$this->config->get('config_language_id') . 
     "') AS order_status FROM `" . DB_PREFIX . "order` o LEFT JOIN `" . DB_PREFIX . "customer` c ON(o.customer_id=c.customer_id) LEFT JOIN `" . DB_PREFIX . "customer_group_description` 
     cg ON(c.customer_group_id=cg.customer_group_id)"; 

但是,当我尝试添加以下它打破。

(SELECT action FROM " . DB_PREFIX . "donate_history h LEFT JOIN " . DB_prefix . "order od ON (h.customer_id = od.customer_id)), 

我不要如果我写的权利。我重写了它,删除了部分内容,试图尽可能简单,但我无法修复它。这是我一直在尝试的:

$sql = "SELECT o.order_id, CONCAT(o.firstname, ' ', o.lastname) AS customer, o.shipping_code, o.total, o.channel, o.currency_code, o.currency_value, o.date_added, o.date_modified, c.image, 
     cg.name AS cgroup, CONCAT(o.payment_address_1, '<br>', o.payment_city, ', ', o.payment_zone, ' ', o.payment_postcode) AS address, o.telephone AS phone, o.email AS email, 
     (SELECT action FROM " . DB_PREFIX . "donate_history h LEFT JOIN " . DB_prefix . "order od ON (h.customer_id = od.customer_id)),    
     (SELECT os.name FROM " . DB_PREFIX . "order_status os WHERE os.order_status_id = o.order_status_id AND os.language_id = '" . (int)$this->config->get('config_language_id') . 
     "') AS order_status FROM `" . DB_PREFIX . "order` o LEFT JOIN `" . DB_PREFIX . "customer` c ON(o.customer_id=c.customer_id) LEFT JOIN `" . DB_PREFIX . "customer_group_description` 
     cg ON(c.customer_group_id=cg.customer_group_id)"; 
+1

什么是错误? – Ali

+0

您没有该列的任何别名。在关闭的圆括号内写上“as action”之类的东西,看其他人看看我的意思。 – Bryan

+1

两个意见:调用一个表“订单”是在寻求麻烦;如果有payment_address_2怎么办? – Strawberry

看起来像你尝试添加的新子查询没有别名。

SELECT o.order_id, CONCAT(o.firstname, ' ', o.lastname) AS customer, o.shipping_code, o.total, o.channel, o.currency_code, o.currency_value, 
    o.date_added, o.date_modified, c.image, cg.name AS cgroup, CONCAT(o.payment_address_1, '<br>', o.payment_city, ', ', o.payment_zone, ' ', o.payment_postcode) AS address, 
    o.telephone AS phone, o.email AS email, 
    (SELECT action 
     FROM " . DB_PREFIX . "donate_history h 
     LEFT JOIN " . DB_prefix . "order od 
      ON (h.customer_id = od.customer_id)) AS donate_history,    
    (SELECT os.name 
     FROM " . DB_PREFIX . "order_status os 
      WHERE os.order_status_id = o.order_status_id AND os.language_id = '" . (int)$this->config->get('config_language_id') . 
    "') AS order_status 
    FROM `" . DB_PREFIX . "order` o 
     LEFT JOIN `" . DB_PREFIX . "customer` c 
      ON(o.customer_id=c.customer_id) 
     LEFT JOIN `" . DB_PREFIX . "customer_group_description` cg 
      ON(c.customer_group_id=cg.customer_group_id)