首页 > 解决方案 > 在 sqlite 中搜索多个单词和智能排序

问题描述

我有一个应用程序,用户可以在其中键入搜索查询,该查询将从 SQLite 数据库中获取结果。如果是用户类型word1 word2 word3,我使用以下查询:

SELECT * FROM myTable 
WHERE myColumn LIKE word1 
   OR myColumn LIKE word2 
   OR myColumn LIKE word3 
ORDER BY myColumn

我得到了至少输入了三个单词中的一个的所有值。我想首先得到匹配三个值的结果,然后是匹配两个值的结果,然后是只匹配一个值的结果

标签: sqliteandroid-sqlite

解决方案


您可以对子WHERE句中的布尔表达式求和并按降序排列:

SELECT * 
FROM myTable 
WHERE myColumn LIKE 'word1'  OR myColumn LIKE 'word2' OR myColumn LIKE 'word3' 
ORDER BY ((myColumn LIKE 'word1') + (myColumn LIKE 'word2') + (myColumn LIKE 'word3')) DESC

请注意,如果您想要完全匹配您应该使用的单词=而不是LIKE,但如果您想要部分匹配,则必须连接%通配符:

myColumn LIKE '%' || 'word1' || '%'

或者:

myColumn LIKE '%word1%'

推荐阅读