您的位置:首页 > 数据库 > MySQL

MYSQL:GROUP_CONCAT,SUBSTRING_INDEX的妙用(转)

2009-09-30 12:41 337 查看
在一个表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代码

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代码

SUBSTRING_INDEX(str,delim,
count
)

返回字符串 str 中在第
count
个出现的分隔符 delim 之前的子串。如果
count
是一个正数,返回从最后的(从左边开始计数)分隔符到左边所有字符。如果
count
是负数,返回从最后的(从右边开始计数)分隔符到右边所有字符:

在上面一个例子中,我们使用“,”来分隔数据,取前面2个,就可以这样写:

SQL代码

SELECT
`id`,SUBSTRING_INDEX(
SELECT
`id`,GROUP_CONCAT(
`
name
`
ORDER

BY
`
name
`
DESC
SEPARATOR
','
),
','
,2)
AS
`
name
`
FROM
`ta`
GROUP

BY
`id`
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: