sqlite - 在 sqlite 中搜索多个单词和智能排序
问题描述
我有一个应用程序,用户可以在其中键入搜索查询,该查询将从 SQLite 数据库中获取结果。如果是用户类型word1 word2 word3
,我使用以下查询:
SELECT * FROM myTable
WHERE myColumn LIKE word1
OR myColumn LIKE word2
OR myColumn LIKE word3
ORDER BY myColumn
我得到了至少输入了三个单词中的一个的所有值。我想首先得到匹配三个值的结果,然后是匹配两个值的结果,然后是只匹配一个值的结果
解决方案
您可以对子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%'
推荐阅读
- postgresql - 如何从其他 hstore 更新现有的 hstore 值(如果缺少则添加)?
- php - Symfony 路径未打开链接但在新选项卡中工作
- android - Android AutoCompleteTextView setText 过滤器始终为真
- javascript - 从相关下拉列表中选择选项
- python - 我正在尝试从 flask-wtf 导入 FlaskForms... 无法导入 FlaskForms
- reactjs - 无限滚动的 Mobx 反应无法正确获取
- python - PyQt5:切换到新窗口时使用 DeleteOnClose
- python - 如何测试使用 Mongodb 和 Motor Client 的 python tornado 应用程序
- javascript - 如何在单击按钮时获取动态呈现的项目内的文本?
- javascript - 生成动态 KML 并使用 Maps API 加载它