问题描述:
MYSQL数据库储存中采用A,B,C,D.....字符串形式储存(I),前台返回值形式为字符串B,D,...(II),要求二者进行匹配,返回的List要求满足条件:II中每个逗号中间的值与I中匹配,存在即以此为条件进行查询。
问题难点:
1、不能在服务端将II拆分,拆分必须在MYSQL层面进行,而在MYSQL中将字符串拆分并转化为or row like B or row like D所需代码量太大。
2、II中的元素量无法提前预知,且有可能非常大,按照常规办法很有可能形成 or row like X*1000的情况,对系统运行不利。
尝试办法:
1、循环拆分II,挨个进行匹配,符合条件后再进行SELECT动作加入新表。(无法在mybatis文件中写入,且代码量太大,对系统压力太大)
2、服务端进行拆分,然后循环查询,将新的结果加入到List,使用List.addAll方法。(此方法成功,但是由于此次网站框架限制,不能在服务端对II进行拆分,故放弃)
3、SELECT * FROM TABLE1 WHERE row like '%B%D%',可以查询出一部分要求内容,但此语句对I中含有D,...B....之类的无效。
解决办法:
采用正则表达式。
SELECT * FROM TABLE1 WHERE row REGEXP B|D
仅需要将II中的逗号改为“|”即可。
附正则表达式“|”的意义:
de|abc ————————匹配de或abc。