Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL-使用opencart时,操作数应包含1列_Php_Mysql_Select_Warnings - Fatal编程技术网

Php MySQL-使用opencart时,操作数应包含1列

Php MySQL-使用opencart时,操作数应包含1列,php,mysql,select,warnings,Php,Mysql,Select,Warnings,在我创建的系统上工作时,我尝试在项目中使用以下查询: SELECT o.order_id, (SELECT op.price, op.quantity, op.name FROM oc_order_product op RIGHT JOIN oc_order o ON op.order_id=o.order_id ) AS product, CONCAT(o.firstname, ' ', o.lastname) AS customer, (SELECT os.name FROM oc_

在我创建的系统上工作时,我尝试在项目中使用以下查询:

SELECT o.order_id, 
(SELECT op.price, op.quantity, op.name FROM oc_order_product op 
RIGHT JOIN oc_order o ON op.order_id=o.order_id ) AS product, 
CONCAT(o.firstname, ' ', o.lastname) AS customer, 
(SELECT os.name FROM oc_order_status os 
WHERE os.order_status_id = o.order_status_id AND os.language_id = '1') AS status, 
o.total, o.currency_code, o.currency_value, o.date_added, o.date_modified 
FROM `oc_order` o WHERE o.order_status_id > '0' ORDER BY o.order_id DESC LIMIT 0,20

但it警告:操作数应包含1列,请帮助我选择列表中的子查询必须只返回一个表达式。返回多个表达式的子查询无效

问题是第二行,它是外部查询的SELECT列表中的一个子查询。并且在子查询的选择列表中有多个表达式

您还需要确保选择列表中的任何子查询最多返回一行

我建议你考虑一个连接操作,而不是一个相关的子查询,类似这样的事情:

SELECT o.order_id
     , op.price      AS product_price 
     , op.quantity   AS product_quantity
     , op.name       AS product_name
     , CONCAT(o.firstname, ' ', o.lastname) AS customer
     , ( SELECT os.name
           FROM oc_order_status os 
          WHERE os.order_status_id = o.order_status_id 
            AND os.language_id = '1'
          LIMIT 1   
       ) AS status
    , o.total
    , o.currency_code
    , o.currency_value
    , o.date_added
    , o.date_modified 
 FROM oc_order o 
 LEFT
 JOIN oc_order_product op
   ON op.order_id=o.order_id
WHERE o.order_status_id > '0' 
ORDER BY o.order_id DESC
LIMIT 0,20
我让子查询在查询中返回
状态
,以演示在SQL语法方面有效的子查询。我添加了LIMIT 1子句,以确保当子查询恰好返回多行时,查询不会在执行时抛出错误


(不清楚您试图通过在选择列表中使用子查询来解决什么问题。)

在这样的选择中使用子查询时添加注释。。在考虑性能时,这通常是一种非常糟糕的做法。。。它有一个WHERE条件,这意味着对于您在外部选择中选择的每一行,您都在使用所有相关查询(子选择)数据进行检查。比如说。。。假设你有100份订单。每个都有两个状态。给你100个订单和200个状态。。这意味着您必须进行100*200或两万次检查才能提取出一个相关查询。如果它是一个大表,不要使用它,而是加入表。