我正在对具有title
,content
和tag
列的表实施基本搜索,只需在列值上使用LIKE
即可。我希望为所有基于title
匹配的行分配3点,基于tag
匹配的行获得2点,并基于content
进行匹配的行得到1点。
是否有可能将所有这些都放入查询中,而不需要使用3个查询?我目前有:
SELECT * FROM node WHERE title LIKE '%keywords%'
我正在使用SQLite以防万一。
最佳答案
使用case
:
select (case when <title condition> then 3
when <content condition> then 2
when <tag condition> then 1
end) as points, t.*
from t
where <title condition> or <content condition> or <tag condition>;
我不知道条件是什么。您可以填写。
如果有可能,您希望这些点相加(一行最多总计6个点),则逻辑类似:
select ((case when <title condition> then 3 else 0 end) +
(case when <content condition> then 2 else 0 end) +
(case when <tag condition> then 1 else 0 end)
) as points, t.*
from t
where <title condition> or <content condition> or <tag condition>;
关于sql - SQL查询可对结果进行排名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41126118/