如何在 MySQL 字段中选择逗号分隔值的唯一值?
Posted
技术标签:
【中文标题】如何在 MySQL 字段中选择逗号分隔值的唯一值?【英文标题】:How to select the unique values of a comma separated values in MySQL field? 【发布时间】:2012-03-20 15:55:27 【问题描述】:类似这样的:
Select UNIQUE_VALUES('1,2,3,5,3,4,2,1,2,3,1,4') as CSVUnique
这样做的结果将是:
CSVUnique
1,2,3,5,4
谢谢!
【问题讨论】:
阅读SELECT DISTINCT
@dev.mysql.com/doc/refman/5.5/en/select.html
@MikePurcell - OP 想要来自单个逗号分隔字符串的不同值,而不是来自列的不同行值。
等等,他实际上是这样存储值的?我认为这是一个初学者问题,认为他是从多行中选择的。哎呀。
【参考方案1】:
mysql 无法像这种方式获得独特性。
首先,以这种方式存储值很糟糕。您应该使用父子表来存储此类数据,而不是存储 com,分隔值。或者应该在插入之前过滤此类重复项。
规范化你的数据库。
从表中获取值并使用 php explode()
,并使用 array_unique
删除重复值。
【讨论】:
***.com/questions/4537838/…的可能重复 有一些方法(仅使用 MySQL)可以获得唯一值。但是 +1 建议正常化。 @ypercube :是的,可以尝试使用存储过程。但我在这里的意图是在问题中发布的方式 UNIQUE_VALUES(...).... 不在 mysql 中【参考方案2】:这是一种方法
CREATE TABLE t
( vals VARCHAR (100));
INSERT INTO t VALUES('1,2,3,5,3,4,2,1,2,3,1,4');
SELECT
GROUP_CONCAT(DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(vals, ',', n.digit+1), ',', -1)) val
FROM
t
INNER JOIN
(SELECT 0 digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6) n
ON LENGTH(REPLACE(vals, ',' , '')) <= LENGTH(vals)-n.digit;
See it working
【讨论】:
以上是关于如何在 MySQL 字段中选择逗号分隔值的唯一值?的主要内容,如果未能解决你的问题,请参考以下文章