【问题标题】:mysql db query for comma separate valuesmysql db查询逗号分隔值
【发布时间】:2013-09-06 11:57:43
【问题描述】:

我有类似的价值观

 | UserName   |    SkillsID      |
 |------------|------------------|
 | Sohil      |    1,2,15,16,19, |
 | Ankur      |    5,8,14,19,    |
 | Lalu       |    4,3,14,15,    |
 | Vinod      |    5,            |
 | Milind     |    8,11          |

现在我想搜索拥有 SkillsID = 5 的用户,那么结果将是

 | UserName   |    SkillsID      |
 |------------|------------------|
 | Ankur      |    5,8,14,19,    |
 | Vinod      |    5,            |

我的查询会怎样?

我曾考虑将 SkillsID 拆分为表,然后对其执行查询,但我没有任何拆分的想法。谁能帮帮我???

提前感谢帮助..

【问题讨论】:

    标签: mysql sql comma


    【解决方案1】:

    您可以使用FIND_IN_SET() 函数或正则表达式:

    SELECT * FROM t WHERE SkillsID REGEXP '(^|,)5($|,)'
    

    但是您在一个字段中存储多个值违反了关系数据库原则。您应该创建一个链接表以正确存储它,并在其中为您的用户表创建一个外键。

    【讨论】:

    • 感谢您对其工作的帮助。我知道我违反了数据库规则,但连接需要更多时间来获取记录。
    【解决方案2】:

    永远,永远,永远不要在一列中存储多个值!

    正如您现在看到的,这只会导致问题。请先像这样规范化您的数据库结构

     User table  
    +-------------------+ 
    | userid | username |
    +-------------------+
    |   1    |  Sohil   |
    |   2    |  Ankur   |
    +-------------------+
    
     skill table
     --------------------
     | Userid| SkillID  |
     |-------|----------|
     | 1     |    1     |
     | 1     |    2     |
     | 1     |    15    |
     | 1     |    16    |
     ...
     | 2     |    5     |
     | 2     |    8     |
     | 2     |    14    |
     ...
    

    【讨论】:

      【解决方案3】:

      您可以使用以下查询将值虚拟地分隔到不同的列中,然后您可以将此查询用作子查询来运行查询。

      select 
      substring_index(column_name,',',1) c1,
      substr(column_name,length(substring_index(column_name,',',1))+2,length(substring_index(column_name,',',2))-length(substring_index(column_name,',',1))-1) c2,
      substr(column_name,length(substring_index(column_name,',',2))+2,length(substring_index(column_name,',',3))-length(substring_index(column_name,',',2))-1) c3,
      substr(column_name,length(substring_index(column_name,',',3))+2,length(substring_index(column_name,',',4))-length(substring_index(column_name,',',3))-1) c4,
      substr(column_name,length(substring_index(column_name,',',4))+2,length(substring_index(column_name,',',5))-length(substring_index(column_name,',',4))-1) c5,
      substr(column_name,length(substring_index(column_name,',',5))+2,length(substring_index(column_name,',',6))-length(substring_index(column_name,',',5))-1) c6
      from table_name
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多