2012-04-23 11 views
6

Tengo una consulta texto completo que termina con:¿Cómo peso 'ORDER BY' en mysql?

ORDER BY RELEVANCE DESC, CLICK_RATE DESC 

¿Puedo dar peso a la orden de? Tal vez 0.3 a relevancia y 0.7 a click_rate?

Como están las cosas ahora, incluso si las cambio, los resultados no son satisfactorios.

Como alternativa, ¿cómo puede tener los mejores resultados 3 ordenados por CLICK RATE y el resto ordenados por relevancia.

Respuesta

8

Esto debería funcionar

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

DEMO

actualización de los comentarios

para hacer 3 mejores resultados Criterio de click_rate, y el tipo de descanso por relevancia

Se necesitaría identificar primero el primer 3 utilizando una subconsulta y hacer el pedido

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

Esto tiene más sentido, por lo que he eliminado mi respuesta. +1 !!! – RolandoMySQLDBA

+0

el campo de relevancia es 0-1 y el campo click_rate es 0.1 y hasta ... ¿esto todavía funciona? Realmente aprecio tu respuesta, ty – califmerchant

+0

@califmerchant No sé por qué pensé que la conversión sería un problema, pero no lo es. Dicho esto, dado que el campo de relevancia es un orden de magnitud mayor que la tasa de clic, es posible que supere la tasa de clic. Probablemente tendrá que jugar con los números para encontrar los valores con los que está satisfecho con –

-2

Se puede utilizar siempre WHERE.

Prueba esto: DONDE RELEVANCIA> 0,3 y 0,7 RELEVANCIA < Ordenar por relevancia DESC, CLICK_RATE DESC

+0

Su respuesta no se aplica - por favor vuelva a leer la pregunta. – belwood