我正在尝试更准确地订购搜索结果。我指定了一个搜索字符串 - 例如“北京奥运会”
最后,每条记录的最高分数为160,我希望结果先按最高分排序,最多只能分为10个。
下面肯定是错的,但它应该说明我希望实现的目标!
SELECT
title,
id,
(
IF((match 'Beijing Olympics' against title)*100) +
IF((match 'Beijing Olympics' against shortDescription)*50) +
IF((match 'Beijing Olympics' against longDescription)*10)
) as score
from listings
order by score desc limit 10
答案 0 :(得分:1)
您可能想要使用CASE
http://dev.mysql.com/doc/refman/5.0/en/case-statement.html
否则我认为你的选择逻辑很好。
SELECT
title
,id
,(
(CASE WHEN title LIKE '%Beijing Olympics%' THEN 100 ELSE 0 END)
+ (CASE WHEN shortDescription LIKE '%Beijing Olympics%' THEN 50 ELSE 0 END)
+ (CASE WHEN longDescription LIKE '%Beijing Olympics%' THEN 10 ELSE 0 END)
) AS score
FROM
listings
ORDER BY
score desc
LIMIT 10
请注意,我还没有对此查询进行过测试,但它应该很接近。
编辑:另请注意,这与精确值匹配。