跳转到帖子
  • 游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

    赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

    TheHackerWorld官方

  • 0

MySQL 函数 —— GROUP_CONCAT


HACK1949

问题

MySQL 函数 —— GROUP_CONCAT

5fe7ea65a69af.png

GROUP_CONCAT 函数返回带有来自一个组的连接的非 NULL 值的字符串结果。该函数是一个增强的 Sybase SQL Anywhere 支持的基本 LIST() 函数。

语法结构

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

DISTINCT:去除重复值 expr [,expr ...]:一个或多个字段(或表达式) ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]:根据字段或表达式进行排序,可多个 SEPARATOR str_val:分隔符(默认为英文逗号)

应用实例

查询某分类的所有子分类并用逗号连接子分类 ID

1234567mysql>SELECT GROUP_CONCAT(cat_id) FROM goods_cat WHERE pid = 25+-----------------------------+| GROUP_CONCAT(cat_id) |+-----------------------------+| 26,111,130,206,239,322,323 |+-----------------------------+

查询某分类的所有子分类并用分号连接子分类 ID

1234567mysql>SELECT GROUP_CONCAT(cat_id SEPARATOR ';') FROM goods_cat WHERE pid = 25+-------------------------------------+| GROUP_CONCAT(cat_id SEPARATOR ';') |+-------------------------------------+| 26;111;130;206;239;322;323 |+-------------------------------------+

查询某分类的所有子分类,根据 p_order ASC, cat_id DESC 排序后再连接

1234567mysql>SELECT GROUP_CONCAT(cat_id ORDER BY p_order ASC, cat_id DESC) FROM goods_cat WHERE pid = 25+----------------------------------------------------------+| GROUP_CONCAT(cat_id ORDER BY p_order ASC, cat_id DESC) |+----------------------------------------------------------+| 332,331,242,212,133,112,29,26,333,330,327,244,138,116 |+----------------------------------------------------------+

结合 GROUP BY 查询

1 2 3 4 5 6 7 8 910mysql>SELECT pid, GROUP_CONCAT(cat_id) FROM goods_cat GROUP BY pid+-----------+-------------------------------------+| parent_id | GROUP_CONCAT(cat_id) |+-----------+-------------------------------------+| 22 | 35,166,191,209,233,252,256,257,258 || 25 | 26,111,130,206,239,322,323 || 26 | 29,51,65,66,70,75,238 || 323 | 332,333,334,335,336,337,338,339 |+-----------+-------------------------------------+

注意:

最大长度(字符)限制

系统变量:group_concat_max_len

1SET [SESSION | GLOBAL] group_concat_max_len = val;

val 必须是无符号整数

用了 GROUP_CONCAT 函数,SELECT 语句中的 LIMIT 语句起不了任何作用。

INT 类型陷阱

连接的字段为 INT 类型时,低版本或出现返回的结果不是逗号分隔的字符串,而是 byte[]

此时,需要用 CAST 或 CONVERT 函数进行转换。

文章作者 Jioby

链接帖子
意见的链接
分享到其他网站

这个问题有0个答案

推荐的帖子

此问题没有答案

黑客攻防讨论组

黑客攻防讨论组

    You don't have permission to chat.
    • 最近浏览   0位会员

      • 没有会员查看此页面。
    ×
    ×
    • 创建新的...