Mysql中逗号分隔列表的问题
我需要帮助解决这个问题 在MYSQL表中,我有一个字段:Mysql中逗号分隔列表的问题,mysql,sql,denormalized,Mysql,Sql,Denormalized,我需要帮助解决这个问题 在MYSQL表中,我有一个字段: Field : artist_list Values : 1,5,3,401 我需要找到艺术家的所有唱片 我这样做 SELECT uid FROM tbl WHERE artist_list IN ('401'); 我有艺术家列表字段值仅为“401”的所有记录,但如果我有11401,则此查询不匹配 有什么想法吗 (我不能使用用户喜欢的方法,因为如果艺术家uid是3(匹配30、33、3333) 虽然首先正确地规范化数据会更有意义,
Field : artist_list
Values : 1,5,3,401
我需要找到艺术家的所有唱片
我这样做
SELECT uid FROM tbl WHERE artist_list IN ('401');
我有艺术家列表字段值仅为“401”的所有记录,但如果我有11401,则此查询不匹配
有什么想法吗
(我不能使用用户喜欢的方法,因为如果艺术家uid是3(匹配30、33、3333)
虽然首先正确地规范化数据会更有意义,但这样您的查询就会变得微不足道,性能也会更好。短期解决方案
使用:
长期解决方案
规范化数据-这似乎是一个多对多关系,已经涉及两个表。需要将逗号分隔的列表转换为自己的表:
艺术家名单
- 艺术家id(主键,艺术家外键)
- uid(主键,TBL的外键)
uid artist
1 401
1 11
1 5
2 5
2 4
2 2
然后您可以查询:
SELECT uid
FROM table
WHERE artist = 401
您还应该研究数据库规范化,因为您所拥有的将在将来导致越来越多的问题。您正在以一种非常糟糕的方式存储数据,因此会遇到问题。最好的做法是这样做。我可以想象,在这里会出现非常昂贵的
REGEXP
答案,这将是灾难性的我们关注性能。FIND_IN_SET
稍微好一点,但不能替代适当的规范化。阅读我的答案。绝对是最佳选择。+1是的,当然……但这不是我的问题:)@soulfaya:我在查询本身的artist_list
两端添加逗号来处理这种情况。回答很好,但是+
是Microsoft SQL Server中的字符串连接运算符,而不是MySQL。在MySQL中,使用CONCAT()
函数,或者将SQL_MODE='PIPES_设置为_CONCAT'
并使用|
。
uid artist
1 401
1 11
1 5
2 5
2 4
2 2
SELECT uid
FROM table
WHERE artist = 401