我正试着更准确地订购我的搜索结果。我指定一个搜索字符串-例如“北京奥运会”
如果标题栏中有“北京奥运会”,则分数加100,否则不加任何内容
如果简短描述栏中包含“北京奥运会”,则分数加50,否则不加任何内容
如果longDescription栏中包含“北京奥运会”,则分数加10,否则不加任何内容
最后,每个记录可能的最大得分是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
最佳答案
您可能想使用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
注意,我还没有测试这个查询,但应该很接近。
编辑:还要注意,这与精确值匹配。
关于mysql - 使用MySQL查询内的查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5913988/