MYsql错误在我的本地机器上。但它在现场工作正常

时间:2017-04-27 05:49:08

标签: php mysql localhost

这是我的MySQL查询

SELECT sum(quantity) as quantity_sold, `gc_order_items`.`name` as `name`, `sku` FROM `gc_orders` JOIN `gc_order_items` ON `gc_order_items`.`order_id` = `gc_orders`.`id` WHERE `status` != 'cart' AND `gc_order_items`.`type` = 'product' GROUP BY `product_id`

我在本地服务器上收到此错误。

  

SELECT列表的表达式#2不在GROUP BY子句中并且包含   非聚合列'go.gc_order_items.name'不是   功能上依赖于GROUP BY子句中的列;这是   与sql_mode = only_full_group_by不兼容   请帮忙!

1 个答案:

答案 0 :(得分:2)

这是您当前的查询:

SELECT
    SUM(quantity) AS quantity_sold,
    gc_order_items.name AS name,
    sku
FROM gc_orders
INNER JOIN gc_order_items
    ON gc_order_items.order_id = gc_orders.id
WHERE status != 'cart' AND
      gc_order_items.type = 'product'
GROUP BY product_id

在本地计算机上,很可能已启用ONLY_FULL_GROUP_BY模式。在这种与ANSI SQL标准一致的模式下,GROUP BY聚合查询中的每一列必须出现在GROUP BY子句中出现在聚合函数中,例如SUM()。对于上述查询,您选择的是skuname列,但它们不会出现在GROUP BY中,也不会出现在聚合函数中,因此会出现错误。

在直播机器上,我的猜测是关闭了严格模式,这样就可以继续进行查询了。

以下是对可在任何地方正确运行的查询版本的猜测:

SELECT
    t2.quantity_sold,
    t2.name,
    t1.sku
FROM gc_orders t1
INNER JOIN
(
    SELECT order_id, name, SUM(quantity) AS quantity_sold
    FROM gc_order_items
    WHERE type = 'product'
    GROUP BY order_id, name
) t2
    ON t1.id = t2.order_id
WHERE t1.status != 'cart'
相关问题