我们正在创建公司数据库,我们希望拥有独特的公司名称。但是,有时用户输入的方式不同,即有一天他们可能会输入“xyz,inc”,有一天他们可能会输入“xyz inc”。虽然名称在逻辑上相同,但不是出于数据库比较的目的。
有什么办法可以在MySQL数据库中找到相似的名字吗?我们已经考虑过使用LIKE
,但决定反对它。
答案 0 :(得分:2)
一种简单的方法是将用户输入分成单词,并删除标点符号:
"xyz, inc." becomes array("xyz", "inc")
然后你可以这样做:
SELECT
*
FROM
company
WHERE
name LIKE '%xyz%'
OR name LIKE '%inc%';
为了改善这一点,你可以为每个单词运行一次查询,并为它们添加权重(因此你需要一个加权表,它可能会说" inc"是一个常用词,因此它不重要)。更多的权重和更多的结果会增加每个结果的排名。
请记住,从性能角度来看,如果你有一个大表,这个策略可能不是最佳的,因为LIKE
执行全表扫描。如果你有10K行就可以了,但如果你有1M行,你可能不会。与往常一样,您应该在有代表性的数据库上进行尝试,看看您的情况是什么样的。
这只是一个快速而简单的解决方案,但如果您要安装特定的搜索系统(如ElasticSearch或Lucene),您将获得更好的结果。
答案 1 :(得分:0)
Select * From table Where company Like '%xyz%'
Select * From table Where company Like '%xyz%' OR company Like '%inc%'
Select * From table Where company Like 'xyz%' AND company Like '%inc%'
最后一个会在你的情况下发挥最佳作用
答案 2 :(得分:0)
Select * From table Where company Like '%xyz%'
Select * From table Where company Like '%xyz' OR company Like '%inc'
Select * From table Where company Like 'xyz%' AND company Like 'inc%'
使用%
符号从第一侧进行搜索,或将%
符号放在最后一个位置以匹配最后一个,或将两侧放在一个匹配的位置。