2012-04-23 14 views
6

Ho una domanda testo completo che termina con:Come ponderare 'ORDER BY' in mysql?

ORDER BY RELEVANCE DESC, CLICK_RATE DESC 

Posso dare peso dell'ordine da parte del? Forse 0.3 di rilevanza e 0.7 a click_rate?

Per come stanno le cose adesso, anche se le cambio in giro, i risultati non sono soddisfacenti.

In alternativa, come è possibile avere i risultati migliori 3 ordinati per CLICK RATE e il resto ordinati per rilevanza.

risposta

8

Questo dovrebbe funzionare

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

DEMO

Aggiornamento da commenti

per rendere primi 3 risultati ordina per click_rate, e il tipo di riposo per importanza

Avresti bisogno in primo luogo identificare i primi 3 con una sottoquery e fare l'ordinamento

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

Questo ha più senso, così ho cancellato la mia risposta. +1 !!! – RolandoMySQLDBA

+0

il campo di pertinenza è 0-1 e il campo click_rate è 0.1 e su ... questo funziona ancora? apprezzo molto la tua risposta, ty – califmerchant

+0

@califmerchant Non so perché ho pensato che la conversione sarebbe stata un problema, ma non è così. Detto questo, il campo di pertinenza è un ordine di grandezza maggiore di click_rate che potresti trovare sopraffatto dalla percentuale di clic. Probabilmente dovrai giocare con i numeri per trovare i valori che ti piacciono con –

-2

È sempre possibile utilizzare WHERE.

Prova questo: DOVE RILEVANZA> 0.3 E PERTINENZA < 0.7 Ordina per importanza DESC, CLICK_RATE DESC

+0

La tua risposta non è valida - ti preghiamo di rileggere la domanda. – belwood