mysql函数group_concat使用方法

GROUP_CONCAT()是MySQL数据库提供的一个函数,通常跟GROUP BY一起使用。

语法:

GROUP_CONCAT([DISTINCT] expr [,expr ...]
             [ORDER BY {unsigned_integer | col_name | expr}
                 [ASC | DESC] [,col_name ...]]
             [SEPARATOR str_val])

1.例如:

 代码如下 复制代码

SELECT student_id, GROUP_CONCAT(courses_id) AS courses FROM student_courses WHERE student_id=2 GROUP BY student_id;

+------------+---------+

| student_id | courses |

+------------+---------+

|            2        | 3,4,5   |

 +------------+---------+

这 就不需要用php循环了

 代码如下 复制代码

$row = $pdo->query("SELECT student_id, GROUP_CONCAT(courses_id) AS courses FROM student_courses WHERE student_id=2 GROUP BY student_id");

$result = explode(',', $row['courses']);

2.当然分隔符还可以自定义,默认是以“,”作为分隔符,若要改为“|||”,则使用SEPARATOR来指定,例如:

 代码如下 复制代码

SELECT student_id, GROUP_CONCAT(courses_id SEPARATOR '|||') AS courses FROM student_courses WHERE student_id=2 GROUP BY student_id;

+------------+---------+

| student_id | courses |

+------------+---------+

|            2        | 3|||4|||5    |

 +------------+---------+

3.除此之外,还可以对这个组的值来进行排序再连接成字符串,例如按courses_id降序来排:

 

 代码如下 复制代码

SELECT student_id, GROUP_CONCAT(courses_id ORDER BY courses_id DESC) AS courses FROM student_courses WHERE student_id=2 GROUP BY student_id;

+------------+---------+

| student_id | courses |

+------------+---------+

|            2        | 5,4,3   |

 +------------+---------+

4.需要注意的:

a.int字段的连接陷阱

当你用group_concat的时候请注意,连接起来的字段如果是int型,一定要转换成char再拼起来,
否则在你执行后(ExecuteScalar或者其它任何执行SQL返回结果的方法)返回的将不是一个逗号隔开的串,
而是byte[]。

该问题当你在SQLyog等一些工具中是体现不出来的,所以很难发现。

select group_concat(ipaddress) from t_ip 返回逗号隔开的串
select group_concat(id) from t_ip 返回byte[]
select group_concat(CAST(id as char)) from t_dep 返回逗号隔开的串
select group_concat(Convert(id , char)) from t_dep 返回逗号隔开的串

附Cast,convert的用法:
CAST(expr AS type), CONVERT(expr,type) , CONVERT(expr USING transcoding_name)
CAST() 和CONVERT() 函数可用来获取一个类型的值,并产生另一个类型的值。

这个类型 可以是以下值其中的 一个:

BINARY[(N)]
CHAR[(N)]
DATE
DATETIME
DECIMAL
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]

b.长度陷阱
用了group_concat后,select里如果使用了limit是不起作用的.
用group_concat连接字段的时候是有长度限制的,并不是有多少连多少。但你可以设置一下。

使用group_concat_max_len系统变量,你可以设置允许的最大长度。
程序中进行这项操作的语法如下,其中 val 是一个无符号整数:
SET [SESSION | GLOBAL] group_concat_max_len = val;
若已经设置了最大长度,则结果被截至这个最大长度。

在SQLyog中执行 SET GLOBAL group_concat_max_len = 10 后,重新打开SQLyog,设置就会生效

时间: 2024-09-17 04:56:04

mysql函数group_concat使用方法的相关文章

oracle 函数 WMSYS.WM_CONCAT 的用法 与 mysql 函数GROUP_CONCAT的用法

1.oracle函数 WMSYS.WM_CONCAT的使用 如图,将图1的结果变成图2的结果,使用函数 WMSYS.WM_CONCAT 即可. 查询语句需要配合使用group by select aa,wmsys.wm_concat(t1.name) from ( select t.name,to_char(t.createdate,'yyyy-mm-dd') aa from td_user t where t.td_conference_id = 3218 and t.status = 1 a

mysql中group_concat函数用法

一.语法   GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]] [SEPARATOR str_val])   也可以简单的理解   group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])   二.group_concat

MySQL中group_concat函数使用例子

本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) . MySQL中group_concat函数 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']) 基本查询 mysql> select * from aa; +--+--+ | id| name | +--+--+ |1 | 10| |1 | 20| |1

MySQL中group_concat函数

本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) .MySQL中group_concat函数完整的语法如下:group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']) 基本查询 mysql> select * from aa;+------+------+| id| name |+------+------+|1 | 10||1

MySQL中的SQRT函数的使用方法

  这篇文章主要介绍了详解MySQL中的SQRT函数的使用方法,是MySQL入门学习中的基础知识,需要的朋友可以参考下 MySQL的SQRT函数是用来计算出任何数量的平方根.可以使用SELECT语句找出方检定根的任意数如下: ? 1 2 3 4 5 6 7 mysql> select SQRT(16); +----------+ | SQRT(16) | +----------+ | 4.000000 | +----------+ 1 row in set (0.00 sec) 所看到的浮点值,

详解MySQL中的SQRT函数的使用方法_Mysql

MySQL的SQRT函数是用来计算出任何数量的平方根.可以使用SELECT语句找出方检定根的任意数如下: mysql> select SQRT(16); +----------+ | SQRT(16) | +----------+ | 4.000000 | +----------+ 1 row in set (0.00 sec) 所看到的浮点值,因为内部MySQL将处理浮点数据类型的平方根. 可以使用SQRT函数,计算出记录的平方根.了解SQRT函数更详细用法,考虑EMPLOYEE_TBL的表具

为什么 MySQL 中 GROUP_CONCAT 函数返回 BLOB 大对象类型?(Why GROUP_CONCAT returns BLOB?)

为什么 MySQL 中 GROUP_CONCAT 函数返回 BLOB 大对象类型?(Why GROUP_CONCAT returns BLOB?) 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作.

mysql数据库连接mysql_connect()函数的使用方法

mysql教程数据库教程连接mysql_connect()函数的使用方法 定义和用法 mysql_connect() 函数打开非持久的 MySQL 连接. 语法 mysql_connect(server,user,pwd,newlink,clientflag) resource mysql_connect ( [string server [, string username [, string password [, bool new_link [, int client_flags]]]]]

MySQL统计函数GROUP_CONCAT报错的原因及解决方法

今天在执行下面这条sql语句时,结果报错了. CREATE table car_user_content select addr_id,comm_userid,GROUP_CONCAT(comm_content) as content from (select * from forum_comment union select * from forum_comment1) as te GROUP BY addr_id,comm_userid ; 这里用到了联合函数GROUP_CONCAT,但在使