mysql 一个字段多条记录的拼接

首先,我拿到了大概这样一堆数据,但是呢 我要把某一个字段的所有值拼接起来。

之前大家应该都写过 count  sum等聚合函数,直接将值进行加减求数量等操作。

但是将值拼起来似乎很难。

原始sql

SELECT
 app_works.uuid,
 app_works.length,
 app_works.can_sell,
 app_works.`status`,
 app_works.collect_count,
 app_category.`name`
FROM
 cooperation_cooperationwork
 LEFT JOIN app_works ON app_works.uuid = cooperation_cooperationwork.work_id
 LEFT JOIN app_works_categories ON app_works_categories.works_id = app_works.uuid
 LEFT JOIN app_category ON app_works_categories.category_id = app_category.id 
WHERE
 cooperation_cooperationwork.cooperation_id = 'a1ff8fe15a7c11e9a0c398039b157b36'

结果如下:

mysql 一个字段多条记录的拼接

其中呢,一首歌对应有很多很多的标签,标签还分有类型,我们想把标签分别剔出来。

group_concat

这个函数很神奇 可以将数据拼起来。还可以指定分隔符,和排序方式。

后来的sql(敏感内容已改为xxx)。

SELECT
	app_works.uuid,
	app_works.length,
	app_works.can_sell,
	app_works.`status`,
	app_works.collect_count,
	group_concat( IF ( app_category.tree_id = x, app_category.`name`, null ) SEPARATOR ',' ) 风格,
	group_concat( IF ( app_category.tree_id = x, app_category.`name`, null ) SEPARATOR ',' ) 情绪,
	group_concat( IF ( app_category.tree_id = x, app_category.`name`, null ) SEPARATOR ',' ) 配器,
	group_concat( IF ( app_category.tree_id = x, app_category.`name`, null ) SEPARATOR ',' ) 节奏
FROM
	cooperation_cooperationwork
	LEFT JOIN app_works ON app_works.uuid = cooperation_cooperationwork.work_id
	LEFT JOIN app_works_categories ON app_works_categories.works_id = app_works.uuid
	LEFT JOIN app_category ON app_works_categories.category_id = app_category.id 
WHERE
	cooperation_cooperationwork.cooperation_id = 'xxx'
GROUP BY cooperation_cooperationwork.id

结果如下:

mysql 一个字段多条记录的拼接

记得别忘记 group by。

具体细节可以搜索这个函数。

????