对类似的查询结果进行优先级排序(sql、mysql)

bihw5rsg  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(545)

假设有一个名为“tbl”的表,其中有一列名为“name”。我想搜索那个字段,但是场景应该是这样的。
如果搜索关键字在开头匹配,则这些结果应排在第一位。
如果搜索关键字在第二个单词的开头匹配,那么接下来应该是那些结果。
像智者一样(第三,第四,第五。。。文字)
如果搜索关键字在第一个词中匹配(但不是在开头),那么这些结果应该出现在下一个词中。
如果搜索关键字在第二个词中匹配(但不是在开头),那么这些搜索结果应该出现在下一个词中。
像智者一样(第三,第四,第五。。。文字)
简单地说,我想让搜索结果满足以下条件。
全词匹配的优先级更高。
关键字匹配优先级应转到第一个匹配的单词。
在匹配的单词中,优先级应该是关键字在该单词中的位置。
例如,如果关键字是“city”,则结果应按以下顺序排列。
灰烬之城是我最喜欢的电影
大城市
我的城市是伦敦
这是一座城市
我名单上最后一个城市是波士顿
我住在城里
容量某物能容纳的最大量
电是一种主要的能源我的电费太高了
这部电梯可容纳10人

dz6r00yl

dz6r00yl1#

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

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

第一个条件匹配单词的开头——假设单词以空格开头。这个 locate() 返回位置,因此字符串越早,搜索越高。
第二个条件匹配字符串中的任何位置。同样的条件也适用——字符串中的较早部分是更好的匹配。

相关问题