当前位置: 首页 > 面试题库 >

MySQL按“最佳匹配”排序

晁文斌
2023-03-14
问题内容

我有一个包含单词的表和一个输入字段,可使用实时搜索来搜索该表。当前,我使用以下查询来搜索表:

SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY word ASC

有没有一种方法可以对结果进行排序,以使在单词开头找到字符串的字符串排在最前面,而在单词后面出现字符串的字符串排在最后呢?

例如:搜索“ hab ”当前返回

  1. 一个 lphabet
  2. ^ h 升技
  3. [R EHAB

但我想这样:

  1. 一下(首先是因为“赞”是开始)
  2. alp hab et(第二个原因是’hab’在单词的中间)
  3. re hab (最后是因为’hab’在单词的结尾)

或者至少这样:

  1. 一下(首先是因为“赞”是开始)
  2. re hab (第二个,因为“ hab”从第三个字母开始)
  3. alp hab et(最后一次是因为’hab’最晚在第四个字母开始)

如果有人可以帮我解决这个问题,那就太好了!


问题答案:

若要以第一方式进行操作(从单词的开头,单词的中间到单词的结尾),请尝试以下操作:

SELECT word
FROM words
WHERE word LIKE '%searchstring%'
ORDER BY
  CASE
    WHEN word LIKE 'searchstring%' THEN 1
    WHEN word LIKE '%searchstring' THEN 3
    ELSE 2
  END

若要第二种方式(匹配字符串的位置),请使用以下LOCATE函数:

SELECT word
FROM words
WHERE word LIKE '%searchstring%'
ORDER BY LOCATE('searchstring', word)

您还可能需要决胜局,例如,多个单词以开头hab。为此,我建议:

SELECT word
FROM words
WHERE word LIKE '%searchstring%'
ORDER BY <whatever>, word

在以开头的多个单词的情况下,以开头hab的单词hab将被分组在一起并按字母顺序排序。



 类似资料:
  • 问题内容: 请帮助我创建一个包含10个’where’子句的select查询,其顺序应为:查询结果应按大多数关键字(where条件)匹配到最不匹配的顺序显示。 注意:所有10个条件都带有“或”。 请帮助我创建此查询。我正在使用MS-SQL Server 2005 喜欢: 在上面的查询中,所有与最大条件匹配的记录都应位于顶部,而较少匹配条件的记录应位于底部。 问题答案:

  • 我的目标是筛选出最佳匹配。在我的例子中,我有一个人员列表,我想按姓氏和名字过滤。 匹配的预趋势将是: < li >姓和名都匹配,返回第一个匹配项 < li >仅姓氏匹配,返回第一个匹配项 < li >不匹配,抛出一些异常 我目前为止的代码:

  • 问题内容: 我试图模糊匹配两个csv文件,每个文件包含一列名称,它们相似但不相同。 到目前为止,我的代码如下: 输出如下: 该脚本工作正常。输出是预期的。但是我所寻找的只是最佳的匹配。 因此,我需要基于第2列中的最大值,以某种方式删除第1列中的重复名称。这应该相当简单,但是我似乎无法弄清楚。任何帮助,将不胜感激。 问题答案: Fuzzywuzzy会以反向排序的顺序返回列表,最佳匹配排在最前面。 因

  • 问题内容: 已关闭 。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗? 更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 我想知道对于一般网站而言,MySQL中是否存在“最佳”排序规则选择,您不确定100%确定要输入什么内容吗?我知道所有编码都应该相同,例如MySQL,Apache,HTML和PHP中的任何内容。 过去,我已将PHP设置为在“ UTF-8”中输出,但是

  • 问题内容: 现在我用下面的查询按每篇文章的auto_increment id进行即时排序 我想知道如何按我创建的日期字段排序,该字段通过strtotime()存储当前日期,它应该查询从最新到最旧的日期。 当前代码 问题答案: 只需更改ORDER BY中的列即可:

  • 问题内容: 目前,我正在执行搜索功能。可以说在我的数据库中,我有以下数据: 关键字1 关键字2 关键字3 关键的东西 钥匙 然后用户输入:“ Key”作为要搜索的关键字。这是我当前的查询: 基本上,我有2个问题: 如何按相似性排序(排序)。从上面的示例中,我希望“ Key”作为我的第一个结果。我当前的结果是:Keyword1,Keyword2,Keyword3,Keysomething和Key 我