`
宋双旺
  • 浏览: 152793 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用GROUP_CONCAT语法

阅读更多

语法:
GROUP_CONCAT([DISTINCT] expr [,expr ...][ORDER BY {unsigned_integer | col_name | expr}[ASC | DESC] [,col_name ...]][SEPARATOR str_val])
下面演示一下这个函数,先建立一个学生选课表student_courses,并填充一些测试数据。
SQL代码

Java代码  收藏代码
  1. CREATE TABLE student_courses (   
  2. student_id INT UNSIGNED NOT NULL,   
  3. courses_id INT UNSIGNED NOT NULL,   
  4. KEY(student_id)   
  5. );   
  6. INSERT INTO student_courses VALUES (1 1 ), ( 1 2 ), ( 2 3 ), ( 2 4 ), ( 2 5 );   




若要查找学生ID为2所选的课程,则使用下面这条SQL:

Java代码  收藏代码
  1. mysql> SELECT student_id, courses_id FROM student_courses WHERE student_id= 2 ;   
  2. +------------+------------+   
  3. | student_id | courses_id |   
  4. +------------+------------+   
  5. 2  |  3  |   
  6. 2  |  4  |   
  7. 2  |  5  |   
  8. +------------+------------+   
  9. 3  rows IN SET ( 0.00  sec)   



输出结果有3条记录,说明学生ID为2的学生选了3、4、5这3门课程。
放在PHP里,必须用一个循环才能取到这3条记录,如下所示:

PHP代码

Java代码  收藏代码
  1. foreach ($pdo->query( "SELECT student_id, courses_id FROM student_courses WHERE student_id=2" ) as $row) {   
  2. $result[] = $row['courses_id' ];   
  3. }   



而如果采用GROUP_CONCAT()函数和GROUP BY语句就显得非常简单了,如下所示:

SQL代码

Java代码  收藏代码
  1. mysql> SELECT student_id, GROUP_CONCAT(courses_id) AS courses FROM student_courses WHERE student_id= 2  GROUP BY student_id;   
  2. +------------+---------+   
  3. | student_id | courses |   
  4. +------------+---------+   
  5. 2  |  3 , 4 , 5  |   
  6. +------------+---------+   
  7. 1  row IN SET ( 0.00  sec)   



这样php里处理就简单了:

PHP代码

Java代码  收藏代码
  1. $row = $pdo->query( "SELECT student_id, GROUP_CONCAT(courses_id) AS courses FROM student_courses WHERE student_id=2 GROUP BY student_id" );   
  2. $result = explode(',' , $row[ 'courses' ]);   



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

SQL代码

Java代码  收藏代码
  1. SELECT student_id, GROUP_CONCAT(courses_id SEPARATOR  '|||' ) AS courses FROM student_courses WHERE student_id= 2  GROUP BY student_id;   



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

Java代码  收藏代码
  1. 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; 
分享到:
评论

相关推荐

    Mysql的GROUP_CONCAT()函数使用方法

    语法: GROUP_CONCAT([DISTINCT] expr [,expr …][ORDER BY {unsigned_integer | col_name | expr}[ASC | DESC] [,col_name …]][SEPARATOR str_val]) 下面演示一下这个函数,先建立一个学生选课表...

    mysql的group_concat函数使用示例

    MySQL中group_concat函数,完整的语法如下: 代码如下:group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator ‘分隔符’]) 基本查询 代码如下:select * from aa; 代码如下:+——+——+|...

    mysql group_concat 实现把分组字段写成一行的方法示例

    本文实例讲述了mysql group_concat 实现把分组字段写成一行的方法。分享给大家供大家参考,具体如下: 功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果。 函数语法: group_concat( [DISTINCT]...

    MySQL中group_concat函数深入理解

    本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) 。 MySQL中group_concat函数 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] ...

    MySQL group-concat分组拼接

    功能:将`group by`产生的同一个分组中的值拼接起来,返回一个字符串结果...语法:group_concat( [distinct] 需拼接字段 [order by 排序字段 asc/desc ] [separator '分隔符'] ) > separator是一个字符串值,缺省为`,`

    mysql如何实现多行查询结果合并成一行

    其完整的语法如下所示: GROUP_CONCAT([DISTINCT] expr [,expr …] [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name …]] [SEPARATOR str_val]) mysql> SELECT student_name, -> GROUP_...

    MySQL多种递归查询方法.docx

    concat,concat_ws,group_concat 函数 MySQL 自定义函数 手动实现 MySQL 递归查询 Oracle 递归查询 在 Oracle 中是通过 start with connect by prior 语法来实现递归查询的。 按照 prior 关键字在子节点端...

    LINQ_to_SQL语法及实例大全

    LINQ to SQL语句(8)之Concat/Union/Intersect/Except 32 Concat/Union/Intersect/Except操作 32 Concat(连接) 32 1.简单形式: 33 2.复 合形式: 33 Union(合并) 33 Intersect(相交) 34 Except(与非) 34 ...

    mysql字符串连接函数

    mysql> select id,group_concat(name order by name desc) from aa group by id; +------+---------------------------------------+ | id| group_concat(name order by name desc) | +------+---------------------...

    sql注入语句.txt

    基本的sql注入语法,大部分存在sql注入都可以使用以上代码来尝试 查询表名 and 1=2 union select 1,table一name from information—scherna.tables where table_schema=database() limit 1,1 and 1=2 union select ...

    mysql中的一些稍微复杂用法实例代码

    GROUP_CONCAT(expr) 1、涉及的表关系:teacher表、teacher_subject_rel表(教师所能教的学科表)、subject表 2、业务场景: 需要拉取所有教师的编号(teacher_no)、学科名(subject_name)。 &nbsp 教师表(teacher)和学科...

    mysql数据库的基本操作语法

    --使用表级约束语法, constraint uk_name_pwd unique(name, password) ); 表示用户名和密码组合不能重复 添加唯一约束 alter table temp add unique(name, password); alter table temp modify name varchar(25) ...

    MySql基本查询、连接查询、子查询、正则表达查询讲解

    select STU_SEX,group_concat(STU_NAME) from STUDENT group by STU_SEX; 3.2、一般情况下group需与统计函数(聚合函数)一起使用才有意义 先准备一些数据: [sql] view plain copy create table EMPLOYEES( ...

    SQL培训第一期

    1 SQL基础 1.1 基本概念 结构化查询语言(Structured Query ...select后面出现的列,如果没有使用集合函数,必须出现在group by 中。 select sno,sname,sum(grade) from student group by sno,sname; //合法写法 select...

    2009达内SQL学习笔记

    使用IN操作符的优点: 在长的选项清单时,语法直观; 计算的次序容易管理; 比 OR 操作符清单执行更快;最大优点是可以包含其他 SELECT 语句,使用能够动态地建立 WHERE 子句。 如 SELECT prod_id,prod_price,prod...

    Oracle8i_9i数据库基础

    §2.3.2 带 GROUP BY 的计算 75 §2.3.3 用 HAVING 来限制分组的计算 75 §2.4 控制和格式化输出 76 §2.4.1 用 ORDER BY 子句来对结果进行排序 76 §2.4.2 用 BREAK 命令 来对结果进行排列 76 §2.4.3 用 COMPUTE ...

    SQL21日自学通

    一般的语法规则 30 你的第一个查询 33 总结 37 问与答 38 校练场 38 练习 39 第三天表达式条件语句与运算 40 第四天函数对数据的进一步处理 60 目标 60 汇总函数 60 COUNT61 SUM 61 AVG 63 MAX 63 MIN 64 VARIANCE65...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    2. 网状结构模型:按照网状数据结构建立的数据库系统称为网状数据库系统,其典型代表是DBTG(Data Base Task Group)。 3. 关系结构模型:关系式数据结构把一些复杂的数据结构归结为简单的二元关系(即二维表格形式)。...

Global site tag (gtag.js) - Google Analytics