`
zqjshiyingxiong
  • 浏览: 440405 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

Mysql的GROUP

    博客分类:
  • DB
阅读更多

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

 

CREATE TABLE student_courses (
student_id INT UNSIGNED NOT NULL,
courses_id INT UNSIGNED NOT NULL,
KEY(student_id)
);
INSERT INTO student_courses VALUES (1, 1), (1, 2), (2, 3), (2, 4), (2, 5);


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

 

mysql> SELECT student_id, courses_id FROM student_courses WHERE student_id=2;
+------------+------------+
| student_id | courses_id |
+------------+------------+
| 2 | 3 |
| 2 | 4 |
| 2 | 5 |
+------------+------------+
3 rows IN SET (0.00 sec)


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

PHP代码 


foreach ($pdo->query("SELECT student_id, courses_id FROM student_courses WHERE student_id=2") as $row) {
$result[] = $row['courses_id'];
}


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

SQL代码 


mysql> 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 |
+------------+---------+
1 row IN SET (0.00 sec)


这样php里处理就简单了:

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']);


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

SQL代码 


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


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


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 Replication 详细搭建部署过程

    MySQL Group Replication 详细搭建部署过程 MySQL Group Replication 是一种基于组的复制技术,用于容错系统中。它由多个服务器(节点)组成,每个节点都可以独立执行事务,而读写事务则会在于 group 内的其他节点...

    深入理解MySQL Group Replication.pdf

    深入理解MySQL Group Replication MySQL Group Replication是一种高可用性和高性能的解决方案,旨在提供数据库的高可用性和高性能。它是MySQL数据库的一部分,旨在提供高可用性和高性能的解决方案。 背景: 数据库...

    深入理解MySQL Group Replication

    ### 深入理解MySQL Group Replication #### 背景与定义 MySQL Group Replication是一种高可用性和可扩展性的解决方案,它通过在多个MySQL服务器之间自动同步数据来确保数据的一致性和可用性。该技术自MySQL 5.7.17...

    MySQL Group Replication环境搭建实战手册

    MySQL Group Replication是一种高可用性和高可扩展性的解决方案,它允许在MySQL集群中实现多主复制,即每个节点都可以读写,并且数据更改会在所有成员之间自动同步。本手册将指导您如何在单机上搭建MySQL 5.7.17的...

    MySQL Group Replication 组复制原理

    ### MySQL Group Replication 组复制原理 #### 一、引言 MySQL Group Replication作为MySQL 5.7.17版本之后引入的一项新特性,它为数据库管理领域带来了全新的复制解决方案。这一特性不仅提升了系统的可用性和扩展...

    MGRMySQL Group Replication学习笔记.pdf

    根据提供的文件内容,我们可以梳理出以下关于MySQL Group Replication(MGR)的知识点: ### MySQL Group Replication(MGR)概念 MGR是MySQL官方在2016年12月推出的解决方案,其目的是为了提供高可用性、高扩展性...

    Mysql 5.7 基于组复制(MySQL Group Replication) - 精华版

    "MySQL 5.7 基于组复制(MySQL Group Replication)" 本篇文章详细介绍了 MySQL 5.7 基于组复制(MySQL Group Replication)的配置说明,实为线上操作手册,在此分享,希望能帮助到有用到的朋友~ MySQL 组复制(MySQL...

    mysql使用GROUP BY分组实现取前N条记录的方法

    本文实例讲述了mysql使用GROUP BY分组实现取前N条记录的方法。分享给大家供大家参考,具体如下: MySQL中GROUP BY分组取前N条记录实现 mysql分组,取记录 GROUP BY之后如何取每组的前两位下面我来讲述mysql中GROUP BY...

    京东完美编译MySQL Group Replication官方文档中文版

    MySQL Group Replication(简称MGR)是MySQL官方于2016年12月推出的一个全新的高可用与高扩展的解决方案。MySQL组复制提供了高可用、高扩展、高可靠的MySQL集群服务

    运维上海2017-从理论到实践,深度解析MySQL Group Replication -徐春阳1

    MySQL Group Replication是一种高可用性和高一致性的数据库复制解决方案,由MySQL官方提供。它通过使用Paxos协议来确保在集群中的多个节点间保持数据的一致性和完整性。在这个主题中,我们将深入探讨Group ...

    MySQL Group Replication-MGR切换工具

    MySQL Group Replication(MGR)组复制是MySQL官方在5.7.17版本引进的一个数据库高可用与高扩展的解决方案,以插件形式提供,实现了分布式下数据的最终一致性。但是官方没有给出vip的漂移方案,官方的推荐是使用...

    MySQL GROUP_CONCAT限制解决方案

    作用:  GROUP_CONCAT函数可以拼接某个字段值成字符串,默认的分隔符是 逗号,即”,” ,  如果需要自定义分隔符可以使用 SEPARATOR  如: SELECT GROUP_CONCAT...(1)在MySQL配置文件中加入:  文件:my.ini

    mysql group by用法

    MySQL中的`GROUP BY`语句是用于对数据库中的数据进行分组,以便可以对每个分组执行聚合操作,如计算总和、平均值、最大值、最小值等。这个功能在数据分析和报表生成中非常常见,因为它允许我们按特定字段对数据进行...

    深度分析mysql GROUP BY 与 ORDER BY

    本文就和大家一起深入研究下mysql中group by与order by.下面是我模拟我的内容表   我现在需要取出每个分类中最新的内容 select * from test group by category_id order by `date` 结果如下   明显。这不是我想...

    MYSQL GROUP BY用法详解

    MySQL中的`GROUP BY`语句是用于数据分组的关键语法,它允许你在多个记录中对相同字段值进行聚合。在数据库管理和分析中,`GROUP BY`通常与聚合函数(如`COUNT`, `SUM`, `AVG`, `MAX`, `MIN`)一起使用,帮助我们从...

    MySQL group-concat分组拼接

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

    mysql分组取每组前几条记录(排名) 附group by与order by的研究

    –按某一字段分组取最大(小)值所在行的数据 代码如下: /* 数据如下: nameval memo a 2 a2(a的第二个值) a 1 a1–a的第一个值 a 3 a3:a的第三个值 b 1 b1–b的第一个值 b 3 b3:b的第三个值 b 2 b2b2b2b2 b 4 b4b4 b ...

Global site tag (gtag.js) - Google Analytics