【问题标题】:I am getting an error in wampserver MySql 5.7.14 related to sql_mode=only_full_group_by when executing a query执行查询时,我在 wampserver MySql 5.7.14 中遇到与 sql_mode=only_full_group_by 相关的错误
【发布时间】:2017-02-26 12:51:23
【问题描述】:

我已更新我的 wampserver (X64)3.0.6 并使用 php 为我正在开发的 Web 应用程序安装 Mysql 5.7.14。在旧版本的 MySql 5.6.17 中运行时,它工作正常。但自从升级到 5.7.14 后,我收到了这个错误:

SELECT 列表的表达式 #1 不在 GROUP BY 子句中,并且包含 非聚合列 'pharmezy-2.p.idproduct' 不是 功能上依赖于 GROUP BY 子句中的列;这是 与 sql_mode=only_full_group_by 不兼容

我的查询是:

    SELECT p.idproduct, p.idproduct, p.product_name, pi.image_url, u.u_company, 
    p.product_rating FROM product p join product_image pi on p.idproduct=pi.idproduct 
    join users u on p.idusers = u.idusers where p.idprocess=1 and p.product_status=1
    group by u.u_company

谢谢

【问题讨论】:

标签: php mysql sql group-by


【解决方案1】:

因为你似乎觉得我写这个答案有问题。

您需要对要聚合的列使用 Aggregate-Functions,例如 MAX()COUNT()。或者你写下你想要分组的所有列。就像你对u.u_company 所做的那样。这也可以通过SELECT DISTINCT 来完成。

例如使用 Aggregate-Function MAX() 并且仅按 u.u_company 分组:

SELECT  MAX(p.idproduct) AS MAX_p_idproduct ,
        MAX(p.product_name) AS MAX_p_product_name ,
        MAX(pi.image_url) AS MAX_pi_image_url ,
        u.u_company ,
        MAX(p.product_rating) AS MAX_p_product_rating
FROM    product p
        JOIN product_image pi ON p.idproduct = pi.idproduct
        JOIN users u ON p.idusers = u.idusers
WHERE   p.idprocess = 1
        AND p.product_status = 1
GROUP BY u.u_company

不使用聚合函数,而是按所有列分组:

SELECT  p.idproduct ,
        p.product_name ,
        pi.image_url ,
        u.u_company ,
        p.product_rating
FROM    product p
        JOIN product_image pi ON p.idproduct = pi.idproduct
        JOIN users u ON p.idusers = u.idusers
WHERE   p.idprocess = 1
        AND p.product_status = 1
GROUP BY u.u_company ,
        p.idproduct ,
        p.product_name ,
        pi.image_url ,
        u.u_company ,
        p.product_rating    

与使用DISTINCT 而不是GROUP BY 的上一个查询相同但不同:

SELECT  DISTINCT p.idproduct ,
        p.product_name ,
        pi.image_url ,
        u.u_company ,
        p.product_rating
FROM    product p
        JOIN product_image pi ON p.idproduct = pi.idproduct
        JOIN users u ON p.idusers = u.idusers
WHERE   p.idprocess = 1
        AND p.product_status = 1

也可以使用聚合函数(与第一个查询相同):

SELECT  DISTINCT MAX(p.idproduct) AS MAX_p_idproduct ,
        MAX(p.product_name) AS MAX_p_product_name ,
        MAX(pi.image_url) AS MAX_pi_image_url ,
        u.u_company ,
        MAX(p.product_rating) AS MAX_p_product_rating
FROM    product p
        JOIN product_image pi ON p.idproduct = pi.idproduct
        JOIN users u ON p.idusers = u.idusers
WHERE   p.idprocess = 1
        AND p.product_status = 1

但在所有情况下,您都需要知道自己要做什么。您只想按u.u_company 分组还是按更多列分组。但无论哪种方式,所有列都参与分组。它们需要通过 Aggregate-Funtion 在组中或由 Aggregate-Funtion 聚合!

【讨论】:

    猜你喜欢
    • 2016-03-10
    • 2018-01-25
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    • 2019-09-21
    • 1970-01-01
    相关资源
    最近更新 更多