猿问

sql中字符串匹配问题

先上数据示例
ID
cat_id
1
1,2,4
2
2,3
3
11,13,17,19
4
3,7,9,12
这是某多对多关系在基于mysql的数据表中的表现形式(因为上头说应用小用两个表就算了)并且筛选查询的要求如下表
推送条件
期望结果(ID)
1
1
1,2
1
1,3
null
3,9
4
3
2,4
注:推送条件和期望结果都是以,隔开,实际上是个一维索引数组推送条件之间是AND关系
目前鄙人想到的基于thinkphp的解决方案是:1.遍历查询结果,将cat_id化为数组2.判断推送条件(数组形式,可以认为就是表单POST来的一维数组)是不是cat_id数组的子集。
然而问题就在遍历查询结果,这里测试是:结果如果达到6000+条,执行时间需要3~20秒左右,比较慢。
于是问一下,上表这样的筛选要求能不能用sql语句实现,从而省掉遍历的过程?
慕斯王
浏览 557回答 2
2回答

斯蒂芬大帝

个人感觉,应该可以用sql语句实现,可以写几个存储函数,但这样一来,估计工作量上可能比多加个中间表要困难许多,而且速度上估计也快不了,建议还是建个中间表

FFIVE

这种集合的问题交给redis来做最方便不过了127.0.0.1:6379>SADDcid_11127.0.0.1:6379>SADDcid_21127.0.0.1:6379>SADDcid_22127.0.0.1:6379>SADDcid_32127.0.0.1:6379>SADDcid_41127.0.0.1:6379>SINTERcid_1cid_21)"1"127.0.0.1:6379>sintercid_2cid_31)"2"
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答