0

可能重复:
在数据库列中存储逗号分隔列表真的那么糟糕吗?

我有一个逗号分隔文本的 mysql db 列:

  id  keys
 ------------
  1  Key1, Key2
  2  key3
  3  key2, key3, key4
  4  key5, key2

问题 1

我需要这样的结果:

id    keys
----------
1    Key1
2    Key2
3    key3
4    key4
5    key5

问题2

我还需要第二个查询来匹配上述条件。例如。

选择所有行key2

输出应该是

id
---
1
4

注意:仅在单个查询中,没有存储过程,没有函数。

我见过类似的问题,但没有想要的答案。

注意:感谢您建议数据不应存储在逗号分隔的字段中。 但是我还没有开发系统和数据库。我正要做一个小升级。

4

1 回答 1

2

这是一个临时解决方案,直到您重新设计表格。由于CROSS JOIN. 它还需要创建一个新的“数字”表:

CREATE TABLE Number
  ( i INT PRIMARY KEY );

用数字填充它,直到单元格中预期的最大键数:

INSERT INTO Number
  VALUES
    (1), (2), ..., (1000) ;  

然后运行它以在逗号分隔的列中为您提供所有不同的键:

SELECT DISTINCT 
    SUBSTRING_INDEX(
          SUBSTRING_INDEX( 
                t.`keys`
              , ', '
              , n.i ) 
        , ', ' 
        , -1 ) AS `key`
FROM 
    Number AS n
  CROSS JOIN 
    YourTable AS t ;

测试于:SQL-Fiddle

于 2012-11-02T12:47:29.743 回答