MySql逗号分隔值,使用Where子句获取

时间:2014-11-13 06:34:50

标签: php mysql

我必须获取表的列,其中一列值由delimete逗号分隔,这是我的表结构

id  | name | categoryID
 1    a       1,2,4
 2    b       333 , 1 , 5 , 54
 3    c       1114414 , 2 , 3, 4, 5, 6 ,7
 4    d       2 , 4 , 5, 333, 7 , 8

Here is my query

Select * from tableA where find_in_set ('categoryID' , '1,7,8,333');

但是上面的查询不起作用它返回空行。

4 个答案:

答案 0 :(得分:0)

第1步:

我建议您更改架构。名称映射到许多类别

id,name,categoryId
1  a     1
2  a     2
3  a     4
4  b     1
5  b     5

第2步:

查找以下类别的所有名称

Select distinct name,id,category_id from tableA where categoryId IN (1,7,8,333);

答案 1 :(得分:0)

Select * from tableA where find_in_set (categoryID , '1,7,8,333')

如果为categoryID传递值1,'find_in_set'将正确返回值。 但是你试图通过(1,2,4),(333,1,5,54)。因此它返回错误的值。

答案 2 :(得分:0)

您对find_in_set函数的使用不正确。 以下内容非常有用,因为它描述了如何正确使用find_in_set函数。

在这里:find_in_set

因此,使用它来查找逗号分隔列表中字符串的位置,如下所示(注意它不区分大小写):

select find_in_set('Z', 'a,b,z,0');

//将产生:3

答案 3 :(得分:0)

你必须在错误的地方使用OR而在find_in_set中。 用作

Select * from tableA where find_in_set ('1',categoryID) OR find_in_set ('7',categoryID);

不要在单引号中引用categoryID。