优先考虑LiKE查询结果(sql,mysql)

时间:2016-10-06 03:02:39

标签: mysql sql sql-like

我们假设有一个名为' tbl'有一个名为' name'的列。我想搜索该字段,但场景应该是这样的。

  • 如果搜索关键字在开头匹配,则应首先显示这些结果。
  • 如果搜索关键字在第二个单词的开头匹配,那么结果应该是下一个。
  • 同样聪明(第三,第四,第五,......单词)
  • 如果搜索关键字在第一个单词中匹配(但不在开头),那么结果应该是下一个。
  • 如果搜索关键字在第二个单词中匹配(但不在开头,那么搜索结果应该是下一个。
  • 同样聪明(第三,第四,第五,......单词)

简单地说,我想订购搜索结果以满足以下要求。

  • 全字匹配是更高优先级。
  • 关键字匹配优先级应转到第一个匹配的字词。
  • 在匹配的单词中,优先级应该转到该单词中关键字的位置。

例如,如果关键字是' city',则结果应如下所示。

恩伯之城是我最喜欢的电影 大城市 我的城市是伦敦 它是一个城市 我名单上的最后一个城市是波士顿 我住在城里 容量可以包含的最大数量 电是马尼的动力源 我的电费是如此之高 这个电梯的容量是十人

1 个答案:

答案 0 :(得分:0)

这有点棘手。但你可以这样做:

order by locate(concat(' ', city), concat(' ', column)),
         locate(city, column)

第一个条件匹配单词的开头 - 假设一个单词以空格开头。 locate()返回位置,因此字符串中较早的位置,搜索值越高。

第二个条件匹配字符串中的任何位置。相同的条件成立 - 字符串中较早的是更好的匹配。