我有一个在线搜索框,需要查看许多MySQL列以进行匹配。它需要处理多关键字搜索。
用例:
我得到了很多特殊的字符,所以全文并不总是有效。所以我将关键字输入拆分为空格,然后循环切换并执行LIKE查询。
获得重点的简化查询(我删除了很多列):
SELECT `cars`.`id`,
`cars`.`car_id`,
`cars`.`date_of_build`,
…..
FROM (`cars`)
WHERE (
`chassis_no` LIKE "DP/101/R/23"
OR `chassis_no` LIKE "DP/101/R/23 %"
OR `chassis_no` LIKE "% DP/101/R/23"
OR `chassis_no` LIKE "% DP/101/R/23 %"
OR `history` LIKE "DP/101/R/23"
OR `history` LIKE "DP/101/R/23 %"
OR `history` LIKE "% DP/101/R/23"
OR `history` LIKE "% DP/101/R/23 %"
….
在这种情况下(rego no)它确切地匹配LIKE,两边没有空格。
这有效..但速度慢,感觉不对。有没有其他方法可以做到更有效率?
编辑::使用REGEXP似乎有效,实际上更快一点:
chassis_no` REGEXP "([ ]*)DP/101/R/23([ ]*)"
我不确定一种更好的方法,因为全文失败了我的数据中的许多特殊字符。