以题库表为例

SQL 多个字段同时模糊查询

现在有个需求是,在题库表中传入字段searchValue,希望可以根据题目和选项模糊查询符合该参数的数据,最开始时,我用的是concat连接:

SELECT * FROM `plant_e_topic`
where 
CONCAT(topic,optionA,optionB,optionC,optionD,optionE,optionF) like concat(concat('%',#{searchValue},'%'));

但是这样子数据总是不全,于是我便换用其它方法,这种方法目前数据准确率为百分之百:

SELECT * FROM `plant_e_topic`
where (
topic like concat('%',1#{searchValue},'%') 
or optionA like concat('%',#{searchValue},'%') 
or optionB like concat('%',#{searchValue},'%') 
or optionC like concat('%',#{searchValue},'%') 
or optionD like concat('%',#{searchValue},'%') 
or optionE like concat('%',#{searchValue},'%') 
or optionF like concat('%',#{searchValue},'%') 
);

需要注意的是:

因为and的优先级高于or,所以需要在or的外层套一个括号,不然数据便会出错

根据题目进行试题查重操作

在平时工作学习中,我们难免会遇到需要进行查重的操作,于是我们便可以使用子查询加count>1来进行查重操作,具体实现sql如下:

select * from plant_e_topic
where topic in (
select topic from plant_e_topic
group by topic having count(topic) > 1
         )

该sql的子查询中,查询出来了根据题目分组并且数量大于1的题目(说明是重复题目),外层sql再查询该表中的题目符合重复题目的所有数据信息

注:以上所有的select * from 中的 * 要换成具体字段,此目的也是为了性能优化