Mysql中Group by时遇到的only_full_group_by问题的解决方法

这个棘手的问题困扰我好久,网上说法不一,这边我列举两种方法,前者傻瓜式,后者兼容性好 

先来看看报错:

message: "SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'cds.user_im_msg.from_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by (SQL: select `conversation_id`, `from_id`, `to_id` from `user_im_msg` where `conversation_id` in (1, 2) and `is_del` = 0 group by `conversation_id`)"

我的理解是,对于某个版本之后的mysql,group by中的字段可能是要在select列中出现的字段,但是如果要这样写的话,就会出现这样的情况


需要的字段全部列出

而我要的结果是这样


正确的结果

解决方法

方法一:修改mysql的配置

修改数据库配置

方法二:使用ANY_VALUE()(推荐)


ANY_VALUE()函数

优缺点:

方法一:

1、比较傻瓜,但是在mysql重启后设置会失效,在php中必须时时设置或者放在构造函数中(这样子做有咩有坏处,请大佬指正)。

2、会有兼容问题,在本地服务器可以使用,但是放到linux上还是会报错,应该是服务器上mysql没有设置生效导致

方法二:

emmmm....谁用谁知道!

不过需要将除group by的字段外的其他字段用ANY_VALUE()包起来,不知道对不对,我也不敢问,如果是select * 的可以省略这一步!

就酱!

你可能感兴趣的:(Mysql中Group by时遇到的only_full_group_by问题的解决方法)