如何根据 sql 中的匹配数针对关键字数组和排序结果搜索字符串?

Posted

技术标签:

【中文标题】如何根据 sql 中的匹配数针对关键字数组和排序结果搜索字符串?【英文标题】:how to search string against array of keywords and order results based on number of matches in sql? 【发布时间】:2019-08-09 00:46:14 【问题描述】:

我在这里看到了类似的答案:

Select and order by most matches

并且想知道如何适应它。实际上很震惊下面的订单声明有效。但想知道如何调整它以用于一系列关键字。

数组['happy','birthday'.. x more keywords]

select *
from table_name query
where column_name like '%something%' or column_name like '%somethingelse%'
order by ((case when column_name like '%something%' then 1 else 0 end) +
          (case when column_name like '%somethingelse%' then 1 else 0 end)
          . . .
         ) desc

【问题讨论】:

【参考方案1】:

一种方法是在子查询中使用unnest()count(*)

select v.*,
       (select count(*)
        from  unnest(array['this', '2', 'is']) pat
        where str like '%' || pat || '%'
       ) cnt
from (values ('this is a test'), ('test 2 x')) v(str) 
order by cnt desc

【讨论】:

以上是关于如何根据 sql 中的匹配数针对关键字数组和排序结果搜索字符串?的主要内容,如果未能解决你的问题,请参考以下文章

使用concat和sort来针对性处理数组内嵌套多数组,并根据条件来进行排序

JavaScript对象数组如何按指定属性和排序方

【JS】数组对象自定义排序

带有 LIMIT 和 OFFSET 的 SQL 排序依据。一次对每个匹配的行进行排序

JS排序算法总结:基数排序

如何映射两个数组并将匹配作为按钮返回?