Cómo hacer consulta de MYSQL ORDEN de los resultados POR las condiciones de orden?

Mi cadena de consulta es como:

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

Para los resultados que desea entradas que cumplen condition1 a ser devuelto en primer lugar, a continuación, las entradas que cumplen condition2, y, finalmente, las entradas que cumplen condition3. Alguna idea?

  • Son sus condiciones distintas? Si no, ¿qué pasa si una entrada se reúne varias condiciones? Por ejemplo, si una entrada cumple las condiciones 1 y 3, ¿cómo deben ser ordenados en comparación con una entrada que cumple las condiciones 1 y 2?
  • no restringir aquí, así que creo que tal vez la primera vez que se reúnen primera vuelta?
InformationsquelleAutor Edward | 2010-04-10

2 Kommentare

  1. 30

    Para obtener la clasificación en el orden que desee, utilice sus condiciones en la ORDEN, 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 porque la consulta es más complejo, entonces usted puede utilizar la lógica booleana para cambiar tu consulta (A OR B OR C) AND D en (A AND D) OR (B AND D) OR (C AND D) a 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

    La AND static no es necesario porque todas las filas de retorno, pero en un ejemplo más complejo (donde también devolver algunas de las filas que no son estáticos), entonces tendría que hacerlo de esta forma.

    • cómo acerca de la condición (tengo mi cadena de consulta actualizada) es como la tabla.id = 123 ? He tratado de ORDEN POR la frase, pero ningún efecto.
    • El ejemplo que me dio antes de que iba a funcionar bien. He actualizado porque de todos modos supongo que el hecho de que la consulta es más complejo de lo que se nos va a permitir saber acerca de.
    • Usted está definitivamente a la derecha! No me di cuenta de que los DESC es necesario, incluso, la condición es como la tabla.id=123. Ahora que lo tengo agregado y funciona como un encanto, muchas gracias!
    • Por qué DESC es necesario por el camino?
    • Porque la VERDADERA es igual a 1, y FALSE es 0. Si desea que el verdadero primero los valores que tienen orden descendente.
  2. 9

    Esto debería funcionar:

    ORDER BY condition1, condition2, condition3

    por ejemplo

    ORDER BY (weight > 500), (height > 3), (height < 2)
    • gracias, pero no funciona, puede ser porque mi real en la cadena de consulta es más complejo, yo lo tengo actualizado

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Recent Articles

Python «set» con duplicados/elementos repetidos

Hay una forma estándar de representar un "conjunto" que puede contener elementos duplicados. Como yo lo entiendo, un conjunto tiene exactamente un cero o...

Python: generador de expresión vs rendimiento

En Python, ¿hay alguna diferencia entre la creación de un generador de objetos a través de un generador de expresión versus el uso de...

Cómo exportar/importar la Masilla lista de sesiones?

Hay una manera de hacer esto? O tengo que tomar manualmente cada archivo de Registro? InformationsquelleAutor s.webbandit | 2012-10-23

no distingue mayúsculas de minúsculas coincidentes en xpath?

Por ejemplo, para el xml a continuación <CATALOG> <CD title="Empire Burlesque"/> <CD title="empire burlesque"/> <CD...