使用MySQL查询查询

时间:2011-05-06 16:00:51

标签: mysql sql

我正在尝试更准确地订购搜索结果。我指定了一个搜索字符串 - 例如“北京奥运会”

  • 如果标题栏中包含“北京奥运会”,则会将得分100添加到分数中,否则不会添加任何内容
  • 如果shortDescription列包含“北京奥运会”,则会在分数中添加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

1 个答案:

答案 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

请注意,我还没有对此查询进行过测试,但它应该很接近。

编辑:另请注意,这与精确值匹配。