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

在类似mysql的查询中获得最匹配的结果,mysql,sql-like,word-boundaries,Mysql,Sql Like,Word Boundaries,假设我有一张这样的桌子: 表:业务 +----+------------------------+ | id | name | +----+------------------------+ | 1 | Carolyn Wong Cakes | | 2 | Cupcakin Cackes Shop | | 3 | Wong Cackes Shop | | 4 | Indie Cakes & Pastries | +---

假设我有一张这样的桌子:

表:
业务

+----+------------------------+
| id | name                   |
+----+------------------------+
| 1  | Carolyn Wong Cakes     |
| 2  | Cupcakin Cackes Shop   |
| 3  | Wong Cackes Shop       |
| 4  | Indie Cakes & Pastries |
+----+------------------------+
我想在搜索名字中的一些单词时得到最匹配的结果。 例如,我想搜索:
Wong Cackes Shop
,这是3个单词。
我使用此查询进行上述搜索:

SELECT * FROM businesses WHERE ( 
  name LIKE '% Wong %' OR 
  name LIKE '% Cackes %' OR
  name LIKE '% Shop %'
)
我希望
记录3
是第一个匹配的结果,但结果是:

  • Carolyn Wong
    //与
    2
    匹配的单词
  • Cupcaking Cackes Shop
    //与
    2
    匹配的单词
  • Wong Cackes Shop
    //与
    3
    匹配的单词
  • 如何搜索单词并在其他结果的基础上获得最匹配结果的记录

    像这样:

  • Wong Cackes Shop
    //与
    3
    匹配的单词
  • Cupcaking咖啡店
  • Carolyn Wong蛋糕
  • 编辑:我的
    单词边界
    LIKE方法也有问题。它不会得到以三个单词中的一个开头或结尾的结果。因为
    中的
    空格
    像“%word%”

    例如:
    Wong[space]
    //不匹配
    [space]Wong[space]
    匹配
    [space]Wong
    //不匹配


    谢谢。

    它做得很正确,因为它只搜索单词。在您的情况下,您应该搜索整个字符串
    Wong Cackes Shop
    (或者)最好实现搜索

    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]

    问题类似于其他问题:您看过全文索引了吗?@草莓我的表引擎是
    innoDB
    。它支持全文吗?你把我和谷歌搞混了。你能看看编辑过的帖子吗。like查询中的
    空格有问题。@Bee157,在消除空格后,会产生类似“Workshop”的问题。这些词的意思不同,并将包含在搜索结果的顶部页面中。@Michael regexp应该用“Workshop”来解决问题