如果使用MySQL在列(逗号分隔值)中提供id,如何选择值?
这里我需要在group_id
列中提供给定的id = 17时获取所有值。
表:
+------------+---------------+
| user_id | group_id |
+------------+---------------+
| 1 | 1,2,3 |
| 3 | 12,23,17 |
| 5 | 17,26 |
+------------+---------------+
我试试:
SELECT * FROM `group` WHERE units_id IN('17'); //No result
期待结果:
+------------+---------------+
| user_id | group_id |
+------------+---------------+
| 3 | 12,23,17 |
| 5 | 17,26 |
+------------+---------------+
答案 0 :(得分:2)
您可以使用FIND_IN_SET
SELECT * FROM `group` WHERE FIND_IN_SET(17,group_id);
注意:非常不鼓励在列中存储逗号分隔值。必须阅读:
Is storing a delimited list in a database column really that bad?
是
此外,您不应使用MySQL reserved words
作为您的身份识别名称。使用时请注意用反引号括起来。
答案 1 :(得分:0)
您可以使用'find_in_set`
SELECT * FROM `group` WHERE find_in_set('17',units_id );
IN
检查列是否包含逗号分隔列表中的值
如果将值存储为csv,则数据库设计非常糟糕。
有关更多信息,请参阅mysql documentation
答案 2 :(得分:0)
试试这个。 您可以使用 find_in_set :
SELECT * FROM `user` WHERE find_in_set('17',group_id) ORDER BY user_id;
结果:
+------------+---------------+
| user_id | group_id |
+------------+---------------+
| 3 | 12,23,17 |
| 5 | 17,26 |
+------------+---------------+