使用MySQL的查询中的查询

使用MySQL的查询中的查询,mysql,sql,Mysql,Sql,我正试图更准确地排序我的搜索结果。我指定一个搜索字符串-例如北京奥运会 如果标题栏包含北京奥运会,则分数100将添加到分数中,否则不添加任何内容 如果shortDescription列包含北京奥运会,则分数加50,否则不加任何内容 如果longDescription列包含北京奥运会,则分数加10,否则不加任何内容 最后,每个记录的最高分数可能是160,我希望结果首先按最高分数排序,最多10个结果 下面肯定是错误的,但它应该说明我希望实现的目标 SELECT title, id

我正试图更准确地排序我的搜索结果。我指定一个搜索字符串-例如北京奥运会

如果标题栏包含北京奥运会,则分数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
您可能需要使用用例

否则我认为你的选择逻辑是好的

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错误:在“北京奥运会”时选择title、id、CASE title,然后从清单1064中选择100或0作为分数-您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以获取正确的语法,使用listingsAh ha中的“近似”作为分数,看起来我需要添加ENDStrange-如果我在每行末尾使用END CASE,我会得到一个错误,如果我只使用END,那么查询将成功完成。我如何调整你美丽的例子,让它检查列是否包含,例如,像北京奥运会,而不是等于北京奥运会。我感谢你的帮助!用我再次编辑过的答案来替换这个等式:天才!它可以工作-我只需要在第三行的longDescription后面添加一个LIKE