如何在MySQL字段中选择逗号分隔值的唯一值?

时间:2012-03-02 05:14:55

标签: mysql database select

这样的事情:

Select UNIQUE_VALUES('1,2,3,5,3,4,2,1,2,3,1,4') as CSVUnique

结果将是:

CSVUnique
1,2,3,5,4

谢谢!

2 个答案:

答案 0 :(得分:6)

没有办法让mysql像这样获得独特性。

首先,以这种方式存储值非常糟糕。您应该使用父子表来存储此类数据,而不是存储com,这是一个单独的值。或者应该在插入之前过滤此类重复项。

规范化您的数据库。

从表中获取值并使用php explode(),并使用array_unique删除重复值。

答案 1 :(得分:0)

这是一种方式

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