Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 通过将一组ID与字段中以逗号分隔的ID进行匹配来查找记录_Mysql - Fatal编程技术网

Mysql 通过将一组ID与字段中以逗号分隔的ID进行匹配来查找记录

Mysql 通过将一组ID与字段中以逗号分隔的ID进行匹配来查找记录,mysql,Mysql,我有下表: Videos ID(Int) Industries(Varchar) 11 3,5,8 22 5 33 1,3 这是理想的结果: Search In Industry Field Found IDs 3 11,33 1,8 11,33 5 11,22 1,5

我有下表:

Videos
ID(Int)  Industries(Varchar)
11       3,5,8
22       5
33       1,3
这是理想的结果:

Search In Industry Field        Found IDs
3                               11,33
1,8                             11,33
5                               11,22
1,5                             11,22,33
3,5,8                           11,22,33
1                               33
8                               11
我正在寻找的是一种方法来提出一个查询,将这样做。find_in_set()是一个很好的函数,但它不能工作,因为它只能搜索一个id。我也不能更改表结构。我可以将每个ID放入find_in_set并使其成为一个循环,但我想知道是否有更好的方法


谢谢,

这可能会帮助您:

中选择*其中
行业
如“%and thethevalue%”


然后用逗号分解搜索输入,对搜索到的每个值执行此操作?

是否可以将不同的搜索集一起查找

Search In Industry Field 3       
WHERE FIND_IN_SET(3,Industries) 

Search In Industry Field 1,8   
WHERE FIND_IN_SET(1,Industries) 
OR FIND_IN_SET(8,Industries) 

这就是没有适当规范化的结果。
1,8
将找不到
11
,那么既然
11
3,5,8
,“3,5”将找到“11,33”;“3,8”将找到“11,33,11”,那么它是否有效?唯一的问题是复式输入很容易解决:)不过我刚才是这样做的。我想看看是否还有其他功能(除了查找集合中的查找)可用。不,没关系。如果您的表读取量很大,而且很少写入,则可以创建一个具有适当规范化的额外表,该表使用索引来加速读取查询,但WriteSeries将需要额外的成本,即必须更新额外的表,并且速度会变慢。如果有足够多的读然后写,那么复制可能会超过维护成本。另一个如果:如果您的一组可能值足够小,您可以将它们转换为位掩码,并且只使用速度非常快的逻辑运算符。如果列类型不是VARCHAR而是SET,请查看
EXPORT\u SET
函数。