MySql查询分组

这篇博客讲述了在MySQL从5.6升级到5.7后遇到的GROUP BY错误,提出了两种解决方案:修改sql_mode或者使用ANY_VALUE函数。同时介绍了GROUP_CONCAT函数在处理分组数据时的优势,提供了一种更方便的数据处理方式。通过调整sql_mode或使用特定函数,可以避免GROUP BY的限制并优化查询结果的呈现。
摘要由CSDN通过智能技术生成

环境WAMP

thinkphp6

mysql5.6升级到5.7之后group会报错

一、更改my.ini的sql_model(不推荐)

二、临时更改

$sql="set @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'";
Db::query($sql);

在查询完数据后要改回来

       其实不改也行,不改的话相当于在这次链接中全局更改了sql_model,重启后还是会变回来

$sql="set @@global.sql_mode ='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'";
Db::query($sql);

三、使用any_value

->field(any_value('字段1'),any_value('字段2'),'group字段不需要')

补充分组:

mysql的group by 查询不能把分组的全部数据展示出来,用group_concat的话个人感觉数据会相对变的更好处理

mysql> select merchants_province,merchants_id from admin_merchants;
+--------------------+--------------+
| merchants_province | merchants_id |
+--------------------+--------------+
| hn                 |            4 |
| hn                 |            5 |
| hn                 |            8 |
| hn                 |            9 |
| hn                 |           12 |
| bj                 |           13 |
| hn                 |           14 |
| hn                 |           15 |
| hn                 |           16 |
| hn                 |           17 |
| hn                 |           18 |
| hn                 |           19 |
+--------------------+--------------+
12 rows in set (0.04 sec)
mysql> select merchants_province,group_concat(merchants_id) from admin_merchants group by merchants_province;
+--------------------+------------------------------+
| merchants_province | group_concat(merchants_id)   |
+--------------------+------------------------------+
| bj                 | 13                           |
| hn                 | 4,5,8,9,12,14,15,16,17,18,19 |
+--------------------+------------------------------+
2 rows in set (0.03 sec)

group_concat可以多个字段

mysql> select merchants_province,group_concat(merchants_id,':',merchants_number) from admin_merchants group by merchants_province;
+--------------------+---------------------------------------------------------------------------------------------------------------------------------+
| merchants_province | group_concat(merchants_id,':',merchants_number)                                                                                 |
+--------------------+---------------------------------------------------------------------------------------------------------------------------------+
| bj                 | 13:15666253                                                                                                                     |
| hn                 | 4:11111111,5:21212121,8:21888811,9:55668811,12:15586253,14:55943354,15:55943355,16:55943356,17:55943357,18:55943358,19:55943359 |
+--------------------+---------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.04 sec)

个人感觉数据会相对好处理一些,只做记录使用(我记得我之前写过可以直接查出数据的,但是时间长给忘了,有大佬知道的话希望点醒一下)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值