1

编辑:我的问题不清楚,所以我在这里重新表述:Order sql result by occurrence of a set of a keyword 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

事实上,每次标题中有关键字时,titlematch 都应该增加。如果标题中有“apple”和“orange”,titlematch应该等于2。但实际上,它不起作用......

(对不起我的英语不好)

4

2 回答 2

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,但如果您愿意,您可以更改您的条件),因此每行都有一个增量值,最后,我按顺序添加此条件按条款。

告诉我是否可以

于 2013-09-02T10:34:41.097 回答
0

我认为它失败了,因为它必须处理所有数据,如果像 someWordYouDontAccountFor 这样的标题它将失败。你必须考虑所有可能的情况或使用其他。

于 2013-09-02T10:18:43.353 回答