这个棘手的问题困扰我好久,网上说法不一,这边我列举两种方法,前者傻瓜式,后者兼容性好
先来看看报错:
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()(推荐)
优缺点:
方法一:
1、比较傻瓜,但是在mysql重启后设置会失效,在php中必须时时设置或者放在构造函数中(这样子做有咩有坏处,请大佬指正)。
2、会有兼容问题,在本地服务器可以使用,但是放到linux上还是会报错,应该是服务器上mysql没有设置生效导致
方法二:
emmmm....谁用谁知道!
不过需要将除group by的字段外的其他字段用ANY_VALUE()包起来,不知道对不对,我也不敢问,如果是select * 的可以省略这一步!
就酱!