天天看點

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。

具體細節可以搜尋這個函數。

?

繼續閱讀