假设我有一张这样的桌子:
表:businesses
+----+------------------------+
| id | name |
+----+------------------------+
| 1 | Carolyn Wong Cakes |
| 2 | Cupcakin Cackes Shop |
| 3 | Wong Cackes Shop |
| 4 | Indie Cakes & Pastries |
+----+------------------------+
我想在搜索name中的一些单词时获取
best matched result
。例如,我想搜索:
Wong Cackes Shop
这是3个单词。我使用此查询进行上述搜索:
SELECT * FROM businesses WHERE (
name LIKE '% Wong %' OR
name LIKE '% Cackes %' OR
name LIKE '% Shop %'
)
我希望
record 3
是第一个匹配结果,但结果是:Carolyn Wong Cakes
//with2
匹配单词Cupcaking Cackes Shop
//with2
匹配单词Wong Cackes Shop
//with3
匹配单词我怎样才能搜索单词并在其他结果的基础上获得匹配结果最多的记录?
这样地:
Wong Cackes Shop
//with3
匹配单词Cupcaking Cackes Shop
Carolyn Wong Cakes
编辑:我的
word-boundaries
类方法也有问题。它不会得到以三个单词中的一个开头或结尾的结果。因为那些spaces
中的LIKE '% word %'
例如:
Wong[space]
/不匹配[space]Wong[space]
匹配[space]Wong
/不匹配谢谢。
最佳答案
下面应该是诀窍
SELECT
name,
(( name LIKE '%Wong%')+( name LIKE '%Cackes%') +(name LIKE '%Shop%')) as total
FROM businesses WHERE (
name LIKE '%Wong%' OR
name LIKE '%Cackes%' OR
name LIKE '%Shop%'
)
ORDER BY total DESC
你甚至可以在这里删除where子句,因为你只是对点击总数感兴趣。
为了克服空格的问题,只需在like子句中去掉它们。
%wong%
将匹配[space]wong
或[space]wong[space]
或wong[space]
关于mysql - 在mysql LIKE查询中获得最匹配的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40591568/