我在执行查询时遇到与sql_mode = only_full_group_by相关的wampserver MySql 5.7.14中的错误

时间:2016-10-17 13:43:06

标签: php mysql sql group-by

我已更新我的wampserver(X64)3.0.6并使用php安装Mysql 5.7.14以用于我正在处理的Web应用程序。当在旧版本的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

Thanku

1 个答案:

答案 0 :(得分:0)

因为你似乎遇到了麻烦我写了这个答案。

您需要对要汇总的列使用聚合函数,例如MAX()COUNT()。或者您记下要分组的所有列。就像你对u.u_company所做的那样。这也可以使用SELECT DISTINCT

完成

例如,使用聚合函数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

也可以使用Aggregation-Funtion(与第一个查询相同):

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进行分组,还是希望按更多列分组?但无论哪种方式,所有列都涉及分组。他们需要通过聚合功能进入群组或聚合!