编辑:我的问题不明确,所以我在这里重新制定了它:Order sql result by occurrence of a set of keywords in a string
我正在改进我的网站搜索系统。我正在尝试在sql请求中使用和增加变量,就像那样......
SET @titlematch = 0;
SELECT *,
CASE
when title like '%apple%' then (SET @titlematch = @titlematch+1)
when title like '%orange%' then (SET @titlematch = @titlematch+1)
when title like '%other_keyword_searched%' then (SET @titlematch = @titlematch+1)
(...)
END,
(...)
FROM pages
(...)
ORDER by @titlematch desc
事实上,每当关键字出现在标题中时,标题匹配就会增加。如果标题中有“apple”和“orange”,则titlematch应等于2。 但实际上,它不起作用......
(对不起我的英文)
答案 0 :(得分:0)
我认为它失败了,因为它必须处理所有数据,如果像someWordYouDontAcccount这样的标题会失败。你必须考虑所有可能的情况或使用其他。
答案 1 :(得分:0)
在回复您的评论时(是的,总是),我以这种方式重写您的查询:
SELECT *, (select count(*) from pages p2 where p1.field_date < p2.field_date) as pos
(...)
FROM pages p1
(...)
ORDER by (select count(*) from pages p2 where p1.field_date < p2.field_date) desc
通过这种方式,您可以在实际之前计算每一行(我基于ipotetic field_date,但如果您希望可以更改条件),那么每行都有一个增量值,最后,我添加这个按条款顺序排列。
告诉我它是否正常