Mysql WHERE problem with comma-separated list

前端 未结 3 990
被撕碎了的回忆
被撕碎了的回忆 2020-12-11 19:48

I need help for this problem.

In MYSQL Table i have a field :

Field  : artist_list  
Values : 1,5,3,401

I need to find all records

相关标签:
3条回答
  • 2020-12-11 20:15
    SELECT uid
    FROM tbl
    WHERE CONCAT(',', artist_list, ',') LIKE '%,401,%'
    

    Although it would make more sense to normalise your data properly in the first place. Then your query would become trivial and have much better performance.

    0 讨论(0)
  • 2020-12-11 20:29

    Short Term Solution

    Use the FIND_IN_SET function:

    SELECT uid 
      FROM tbl 
     WHERE FIND_IN_SET('401', artist_list) > 0
    

    Long Term Solution

    Normalize your data - this appears to be a many-to-many relationship already involving two tables. The comma separated list needs to be turned into a table of it's own:

    ARTIST_LIST

    • artist_id (primary key, foreign key to ARTIST)
    • uid (primary key, foreign key to TBL)
    0 讨论(0)
  • 2020-12-11 20:30

    Your database organization is a problem; you need to normalize it. Rather than having one row with a comma-separated list of values, you should do one value per row:

    uid    artist
    1      401
    1       11
    1        5
    2        5
    2        4
    2        2
    

    Then you can query:

    SELECT uid
      FROM table
     WHERE artist = 401
    

    You should also look into database normalization because what you have is just going to cause more and more problems in the future.

    0 讨论(0)
提交回复
热议问题