【问题标题】:How to select the unique values of a comma separated values in MySQL field?如何在 MySQL 字段中选择逗号分隔值的唯一值?
【发布时间】: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

谢谢!

【问题讨论】:

  • @MikePurcell - OP 想要来自单个逗号分隔字符串的不同值,而不是来自列的不同行值。
  • 等等,他实际上是这样存储值的?我认为这是一个初学者问题,认为他是从多行中选择的。哎呀。

标签: mysql database select


【解决方案1】:

mysql 无法像这种方式获得独特性。

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

规范化你的数据库。

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

【讨论】:

  • 有一些方法(仅使用 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

【讨论】:

    猜你喜欢
    • 2020-08-12
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 2017-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多