举例1
可以使用IF函数将单选和多选的值分别拼接,并在最后的结果中使用CONCAT_WS函数将它们合并:
id colors
1 1
2 2
3 3
4 4,5
5 1,2,3
6 2,3,4,5
我们想要的结果为1;2;3;4,5。。。。。。
下面开始测试
SELECT CONCAT_WS('; ', GROUP_CONCAT(IF(INSTR(colors, ',') > 0, NULL, colors)), GROUP_CONCAT(IF(INSTR(colors, ',') > 0, colors, NULL)) ) AS all_colors FROM colors;
在这个例子中,IF(INSTR(colors, ',') > 0, NULL, colors)函数将单选的值返回,IF(INSTR(colors, ',') > 0, colors, NULL)函数将多选的值返回。然后,GROUP_CONCAT函数将它们分别拼接。最后,CONCAT_WS函数使用分号将它们合并在一起。
输出打印
| all_colors | |-------------| | 1; 2; 3; 4,5 |
在这个结果中,单选的值(1、2、3)使用分号拼接,多选的值(4,5)使用逗号拼接,符合你的要求。
举例2
按照例子1的表格延续一个type字段:single,multiple,用于判断多选还是单选
SELECT CONCAT_WS('; ', GROUP_CONCAT( IF(type = 'single', colors, NULL) ), GROUP_CONCAT( IF(type = 'multiple', GROUP_CONCAT(SUBSTRING_INDEX(value, ',', 1) SEPARATOR ','), NULL ) ), IF(GROUP_CONCAT(IF(type = 'single', colors, NULL)) REGEXP '[^,]$', ',', '' ), GROUP_CONCAT( IF(type = 'multiple', SUBSTRING_INDEX(value, ',', -1), NULL ) ) ) AS all_colors FROM colors GROUP BY type;
在这个查询中,我使用了IF函数和GROUP_CONCAT函数来判断每个值的类型,并将它们拼接起来。如果值是单选的,则直接将它们拼接在一起,如果是多选的,则将它们按逗号分隔后再拼接起来。
查询结果将会是:
| all_colors | |-------------| | 1; 2; 3 | | 4,5 |
举例3
跟举例2一样,我们只是怕拼接的方式合并在一起
将单选和多选的值拼接在一起,并用分号分隔,你可以在查询中使用CONCAT_WS函数来实现。以下是一个示例查询,用于将单选和多选的值按要求拼接:
SELECT CONCAT_WS('; ', GROUP_CONCAT( IF(type = 'single', colors, NULL) ), GROUP_CONCAT( IF(type = 'multiple', GROUP_CONCAT(SUBSTRING_INDEX(value, ',', 1) SEPARATOR ','), NULL ) ), IF(GROUP_CONCAT(IF(type = 'single', colors, NULL)) REGEXP '[^,]$', ',', '' ), GROUP_CONCAT( IF(type = 'multiple', SUBSTRING_INDEX(value, ',', -1), NULL ) ) ) AS all_colors FROM colors;
在这个查询中,我将单选和多选的值拼接在一起,并用分号分隔。具体来说,我使用了CONCAT_WS函数将两个拼接后的字符串用分号连接起来。
查询结果将会是:
| all_colors | |-----------------| | 1; 2; 3; 4,5 |