2012-04-23 28 views
6

Tôi có một truy vấn toàn văn kết thúc bằng:Làm thế nào để cân nặng 'ORDER BY' trong mysql?

ORDER BY RELEVANCE DESC, CLICK_RATE DESC 

Tôi có thể cung cấp cho trọng lượng trình tự do không? Có thể 0.3 liên quan và 0.7 đến click_rate?

Vì mọi thứ đang diễn ra ngay bây giờ, ngay cả khi tôi chuyển đổi chúng xung quanh, kết quả không thỏa đáng.

Cách khác có thể có kết quả hàng đầu là 3 được sắp xếp theo CLICK RATE và phần còn lại được sắp xếp theo mức độ liên quan.

Trả lời

8

này nên làm việc

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

DEMO

Update từ bình luận

để làm cho top 3 kết quả Sắp xếp theo click_rate, và loại còn lại bởi sự liên quan

Bạn sẽ cần phải đầu tiên xác định được 3 đầu tiên sử dụng một subquery và thực hiện lệnh

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

Điều này làm cho ý nghĩa hơn, vì vậy tôi đã xóa câu trả lời của tôi. +1 !!! – RolandoMySQLDBA

+0

trường có liên quan là 0-1 và trường click_rate là 0,1 trở lên ... điều này vẫn hoạt động? Tôi thực sự đánh giá cao câu trả lời của bạn, ty – califmerchant

+0

@califmerchant Tôi không biết tại sao tôi nghĩ rằng chuyển đổi sẽ là một vấn đề nhưng không phải của nó. Điều đó nói rằng vì trường có liên quan là thứ tự độ lớn lớn hơn click_rate, bạn có thể thấy rằng nó áp đảo click_rate. Bạn có thể sẽ phải chơi với các con số để tìm các giá trị bạn hài lòng với –

-2

Bạn luôn có thể sử dụng WHERE.

Hãy thử điều này: ĐÂU NĂNG ỨNG> 0.3 VÀ NĂNG ỨNG < 0,7 ORDER BY NĂNG ỨNG DESC, CLICK_RATE DESC

+0

Câu trả lời của bạn không áp dụng - vui lòng đọc lại câu hỏi. – belwood

Các vấn đề liên quan