MYSQL:GROUP_CONCAT,SUBSTRING_INDEX的妙用(转)

 
在一个表ta中数据为:
+----+------+
| id | name |
+----+------+
| 1 | a    |
| 1 | b    |
| 1 | c    |
| 1 | d    |
| 2 | a    |
| 2 | b    |
| 2 | c    |
| 3 | d    |
+----+------+
从里面取数据要求完成如下效果:
+----+--------+
| id | name    |
+----+--------+
| 1 | a,b,c,d |
| 2 | a,b,c    |
| 3 | d          |
+----+--------+
在MySQL4.1中,加入了GROUP_CONCAT这个函数,我们就可以很轻松的完成这个任务
SQL代码
  1. SELECT `id`,GROUP_CONCAT( ` name ` ORDER BY ` name ` DESC SEPARATOR ',' ) AS name FROM `ta` GROUP BY `id`  
但是如果要取得每个ID的前2个数据时即完成如下效果:
+----+------+
| id | name |
+----+------+
| 1 | a,b    |
| 2 | a,b    |
| 3 | d       |
+----+------+
因为GROUP_CONCAT函数虽然支持ORDER BY但是却不支持LIMIT,这个时候只能用变通的手段了,用SUBSTRING_INDEX函数,这个函数在MySQL手册中的说明是:
SQL代码
  1. SUBSTRING_INDEX(str,delim, count )   
  2. 返回字符串 str 中在第 count 个出现的分隔符 delim 之前的子串。如果 count 是一个正数,返回从最后的(从左边开始计数)分隔符到左边所有字符。如果 count 是负数,返回从最后的(从右边开始计数)分隔符到右边所有字符:   
在上面一个例子中,我们使用“,”来分隔数据,取前面2个,就可以这样写:
SQL代码
  1. SELECT `id`,SUBSTRING_INDEX( SELECT `id`,GROUP_CONCAT( ` name ` ORDER BY ` name ` DESC SEPARATOR ',' ), ',' ,2) AS ` name ` FROM `ta` GROUP BY `id` 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值