mysql group_concat合并行用法和问题
时间:2014-07-06 16:55 来源:linux.it.net.cn 作者:IT网
有的时候为了程序的简单,我们会用mysql的group_concat来合并列,用着很方便,但是也会出现问题
一,准备测试表
-
mysql> show create table test\G; //测试表
-
*************************** 1. row ***************************
-
Table: test
-
Create Table: CREATE TABLE `test` (
-
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
-
`name` varchar(255) NOT NULL DEFAULT '',
-
`nickname` varchar(255) NOT NULL DEFAULT '',
-
`sex` varchar(255) NOT NULL,
-
PRIMARY KEY (`id`)
-
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8
-
1 row in set (0.00 sec)
-
-
ERROR:
-
No query specified
-
-
mysql> select * from test; //测试数据
-
+----+-----------+----------+-----+
-
| id | name | nickname | sex |
-
+----+-----------+----------+-----+
-
| 1 | 张映 | tank | 1 |
-
| 2 | zhang | tank | 1 |
-
| 3 | ying | | 1 |
-
| 4 | zhangying | tank | 1 |
-
+----+-----------+----------+-----+
-
4 rows in set (0.00 sec)
二,group_concat的用法
规则如下
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr}
[ASC | DESC] [,col_name ...]]
[SEPARATOR str_val])
-
mysql> SELECT GROUP_CONCAT(name) AS name,GROUP_CONCAT(nickname separator "|") as nickname from test GROUP BY sex;
-
+-----------------------------+-----------------+
-
| name | nickname |
-
+-----------------------------+-----------------+
-
| 张映,zhang,ying,zhangying | tank|tank||tank |
-
+-----------------------------+-----------------+
-
1 row in set (0.00 sec)
这样我就能把我要的行中的某些列给拿出来了,就不用去写循环组合数据了。
二,group_concat的存在的问题
1,如果想合并的列是int型的,合并出来提示[BLOB - 7 B]或者[BLOB - 7 字节],这个时候要GROUP_CONCAT( cast( id AS char ) ) AS id 而不能GROUP_CONCAT( id ) AS id,cast是一个转换函数
2,group_concat对长度是有限制的,mysql默认的是1024字节,
-
mysql> show variables like "%concat%";
-
+----------------------+-------+
-
| Variable_name | Value |
-
+----------------------+-------+
-
| group_concat_max_len | 1024 |
-
+----------------------+-------+
-
1 row in set (0.00 sec)
如果超过了这个长度,我想数据取不全,有兴趣的朋友可以试一下。如果想改大的话,在my.cnf中的[mysqld]加上以下内容group_concat_max_len = 10240,重起一下mysql就行了。
(责任编辑:IT)
有的时候为了程序的简单,我们会用mysql的group_concat来合并列,用着很方便,但是也会出现问题
一,准备测试表
二,group_concat的用法 规则如下 GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]] [SEPARATOR str_val])
这样我就能把我要的行中的某些列给拿出来了,就不用去写循环组合数据了。 二,group_concat的存在的问题 1,如果想合并的列是int型的,合并出来提示[BLOB - 7 B]或者[BLOB - 7 字节],这个时候要GROUP_CONCAT( cast( id AS char ) ) AS id 而不能GROUP_CONCAT( id ) AS id,cast是一个转换函数 2,group_concat对长度是有限制的,mysql默认的是1024字节,
如果超过了这个长度,我想数据取不全,有兴趣的朋友可以试一下。如果想改大的话,在my.cnf中的[mysqld]加上以下内容group_concat_max_len = 10240,重起一下mysql就行了。 (责任编辑:IT) |