2010-04-10 9 views
17

Mi cadena de consulta es como:Cómo hacer que los resultados de la consulta MYSQL ORDER BY condiciones orden?

SELECT ... FROM maintable 
LEFT JOIN table1 on (maintable.id = table1.idx) 
LEFT JOIN table2 on (table1.idy = table2.idy) 
LEFT JOIN table3 on (table2.idz = table3.idz) 
WHERE (condition1 OR condition2 OR condition3) 
AND maintable.status = static 

//condition1 & condition2 & condition3 are kind of 
table3.idz = 101, table3.idz = 3, maintable.id IN (1,2,3,4), and so on 

Por los resultados que quiero entradas que cumplen condition1 de devolverlo primero, a continuación, los proyectos que reúnan condition2, y finalmente entradas que cumplen condition3. ¿Algunas ideas?

+1

¿Son sus condiciones distintas? Si no, ¿qué pasa si una entrada cumple múltiples condiciones? Por ejemplo, si una entrada cumple con las condiciones 1 y 3, ¿cómo se debe ordenar en comparación con una entrada que cumpla con las condiciones 1 y 2? –

+0

no restrinja aquí, ¿así que creo que tal vez primero cumpla con la primera devolución? – Edward

Respuesta

24

Para obtener la clasificación en el orden que desee, use sus condiciones en el ORDER BY, pero el uso de DESC después de ellos.

SELECT * 
FROM person 
WHERE (condition1 OR condition2 OR condition3) 
AND maintable.status = static 
ORDER BY 
    condition1 DESC, 
    condition2 DESC, 
    condition3 DESC 

Si esto no funciona debido a que su consulta es más compleja, a continuación, puede utilizar la lógica booleana para cambiar la consulta (A OR B OR C) AND D en (A AND D) OR (B AND D) OR (C AND D) continuación, puede utilizar la siguiente consulta:

SELECT * 
FROM person 
WHERE (condition1 OR condition2 OR condition3) 
AND maintable.status = static 
ORDER BY 
    condition1 AND static DESC, 
    condition2 AND static DESC, 
    condition3 AND static DESC 

El AND static no es necesario aquí porque todas las filas lo devuelven, pero en un ejemplo más complejo (donde también devuelve algunas filas que no son estáticas), entonces tendría que hacerlo de esta manera.

+1

1 por reconocer que se necesita 'DESC'! –

+0

¿qué tal la condición (tengo mi cadena de consulta actualizada) es como table.id = 123? He intentado ORDER BY sentence, pero no effect. – Edward

+0

@Relax: El ejemplo que di antes funcionaría bien. Lo he actualizado de todos modos porque supongo que su consulta en realidad es más compleja de lo que nos permitirá saber. –

7

Esto debería funcionar:

ORDER BY condition1, condition2, condition3 

por ejemplo

ORDER BY (weight > 500), (height > 3), (height < 2) 
+0

gracias, pero no es un trabajo, es posible que debido a mi cadena de consulta real es más complejo, lo tengo actualizado – Edward

Cuestiones relacionadas