MySQL高版本用group by错误-sql_mode=only_full_group_by解决方案

数据库去除重复数据,需要将数据进行分组,并取出其中一条来展示,group by语句可能会用到。
但是,如果mysql是高版本5.7以上,当执行group by时,如果select查询了多个字段. 而group by分组时却只选择了一个字段时,sql语句就会报错。同时用order by id 之类的,也会报错.原因都一样.报错信息如下:

#1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘tg_contlist.id’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

//比如这样会报错
$sql="SELECT id,title,pic,type FROM 
`tg_contlist`  where $where group by type  limit 50 ";

而下面这样就不会了,解决思路就是.让数据库能够有依据去选择没有被分组的那几个字段的值.

 $sql="SELECT MAX(id) as id,any_value(title),any_value(pic),`type` FROM 
 `tg_contlist`  where $where group by type  limit 50 ";
 //max表示选择id最大的那个.any_value表示按排序第一个的来选取

怎么排序呢?因为用了max函数.默认只取一个.排序好像没什么意义??

 $sql="SELECT MAX(id) ,any_value(title),any_value(pic),`type` FROM
  `tg_contlist`  where $where group by type order by MAX(id) desc limit 50 ";//order by id 一 样会报错的.注意了

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值