2012-04-23 35 views
6

我有结尾的全文查询:如何在mysql中权衡'ORDER BY'?

ORDER BY RELEVANCE DESC, CLICK_RATE DESC 

我能给重量至的订单?也许0.3与相关性和0.7click_rate

现在情况正在改变,即使我切换它们,结果也不令人满意。

作为一种替代方法,顶部3结果按CLICK RATE排序,其余按照相关性排序。

回答

8

这应该工作

ORDER BY (.3 * RELEVANCE) + (.7 * CLICK_RATE) DESC

DEMO

从评论更新

排序click_rate使前3的结果,并通过相关的其他种类

你需要使用子查询首先确定第3,做好订货

SELECT test.id, 
     test.relevance, 
     test.click_rate, 
     top_3_click_rate.id   t3_id, 
     top_3_click_rate.click_rate t3_click_rate 
FROM test 
     LEFT JOIN (SELECT id, 
         click_rate 
        FROM test 
        ORDER BY click_rate DESC 
        LIMIT 3) top_3_click_rate 
     ON test.id = top_3_click_rate.id 
ORDER BY top_3_click_rate.click_rate DESC, 
      test.relevance DESC 

DEMO

+0

这更有意义,所以我删除我的答案。 +1 !!! – RolandoMySQLDBA 2012-04-23 19:48:35

+0

相关性字段为0-1,click_rate字段为0.1以上...这仍然有效吗?我真的很感谢你的回答,ty – califmerchant 2012-04-23 20:01:48

+0

@califmerchant我不知道为什么我认为转换是一个问题,但不是。这就是说,因为相关性字段比click_rate大一个数量级,您可能会发现它压倒了click_rate。你可能需要使用数字来找到你喜欢的值 – 2012-04-23 20:20:20

-2

您可以随时使用WHERE。

试试这个: WHERE相关性> 0.3和相关< 0.7 ORDER BY DESC相关性,CLICK_RATE DESC

+0

您的答案不适用 - 请重新阅读该问题。 – belwood 2012-04-23 19:59:24