我必须获取表的列,其中一列值由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');
但是上面的查询不起作用它返回空行。
答案 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。