2012-04-23 9 views
6

Mam kwerendy pełnego tekstu, który kończy się:Jak waga "ORDER BY" w mysql?

ORDER BY RELEVANCE DESC, CLICK_RATE DESC 

Mogę dać wagę do zamówienia przez tych? Może 0.3 na znaczenie i 0.7 na click_rate?

Teraz, gdy wszystko jest w porządku, nawet jeśli je przełączam, wyniki nie są satysfakcjonujące.

Alternatywnie, w jaki sposób można uzyskać najlepsze wyniki 3 posortowane według CLICK RATE, a pozostałe posortowane według trafności.

Odpowiedz

8

To powinno działać

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

DEMO

Update z uwag

do 3 najlepsze wyniki Sortuj według click_rate i porządek reszta według trafności

trzeba by najpierw zidentyfikować pierwsze 3 Korzystanie podkwerenda i wykonaj zamawiania

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

To sprawia, że ​​więcej sensu, więc usunąłem moją odpowiedź. +1 !!! – RolandoMySQLDBA

+0

pole trafności wynosi 0-1, a pole click_rate wynosi 0,1 i więcej ... czy to nadal działa? Naprawdę doceniam twoją odpowiedź, ty – califmerchant

+0

@califmerchant Nie wiem, dlaczego myślałem, że konwersja będzie problemem, ale nie jest. To powiedziawszy, ponieważ pole trafności jest o rząd wielkości większe niż wartość parametru click_rate, które może przełożyć się na wartość click_rate. Prawdopodobnie będziesz musiał zagrać z liczbami, aby znaleźć wartości, które Cię zadowoliły. –

-2

zawsze można użyć WHERE.

Spróbuj tego: GDZIE ZNACZENIE> 0,3 i znaczenie < 0,7 ORDER BY Trafność DESC, CLICK_RATE DESC

+0

Twoja odpowiedź nie ma zastosowania - prosimy ponownie przeczytać pytanie. – belwood