如果使用mysql列(逗号分隔值)中的id可用,如何选择值?

时间:2016-08-31 11:30:37

标签: mysql

如果使用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 |   
+------------+---------------+

3 个答案:

答案 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 |   
+------------+---------------+  

参考:MySQL query finding values in a comma separated string