在mysql LIKE查询中获得最匹配的结果



假设我有一个这样的表:

表: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是第一个匹配的结果,但结果是:

  1. Carolyn Wong Cakes//2匹配字
  2. Cupcaking Cackes Shop//2匹配字
  3. Wong Cackes Shop//3匹配字

如何搜索单词并在其他结果之上获得最匹配结果的记录?

像这样:

  1. Wong Cackes Shop//3匹配字
  2. Cupcaking Cackes Shop
  3. Carolyn Wong Cakes
编辑:我的word-boundaries LIKE方法也有一个问题。它不会得到以3个单词开头或结尾的结果。因为LIKE '% word %'中的spaces
例如:
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子句,因为您只对总命中数感兴趣。
为了克服空格的问题,只要在类似子句中去掉空格即可。%wong%将匹配[space]wong[space]wong[space]wong[space]

这是正确的,因为它将只搜索单词。在您的情况下,您应该搜索整个字符串Wong Cackes Shop (OR)最好实现FULL TEXT搜索

相关内容

  • 没有找到相关文章

最新更新