2012-04-23 45 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