2009-11-27 20 views
5

En Mysql, cuando ejecuta una instrucción SQL seleccionada, hay un orden predeterminado si no incluye una cláusula de clasificación, ¿cómo revertir el orden predeterminado? Solo agregue DESC?¿Cómo revertir el orden predeterminado en Mysql?

+0

Duplicado: http://stackoverflow.com/questions/1793147/sql-best-practice-to-deal-with-default-sort-order/1793162#1793162 –

+0

No existe el "orden predeterminado" entonces no puedes "revertirlo". –

Respuesta

3

No hay una orden garantizada si no especifica una cláusula ORDER BY, por lo que el 'reverso de la orden predeterminada' no está definido.

+0

Para aquellos que prefieren respuestas con evidencia para respaldar los reclamos hechos: https://stackoverflow.com/questions/8746519/sql-what-is-the-default-order-by-of-queries – Patrick

1

Creo que será mejor si especifica el orden que realmente desea. Las tablas, por su naturaleza, no tienen orden. Probablemente solo se muestre en el orden en que se insertaron las filas, aunque no hay garantía de que permanezca en ese orden.

Es probable que, es probable que sólo quiere agregar este:

ORDER BY id DESC 

... ya que la mayoría de las veces, la gente utiliza un campo de incremento automático llamado "id"

+0

Pero qué lástima, no hay un campo "Id" en la tabla. – Steven

+0

Pero si no hay un campo Id, o equivalente, ¿el orden es significativo? – pavium

+0

Creo que el orden predeterminado en el que se insertaron las filas, el orden predeterminado es "Primero insertado, último fuera". Quiero cambiarlo a "Primero insertado, primero fuera". – Steven

5

Si desea que el datos para salir ordenados consistentemente, debe usar ORDER BY seguido de la (s) columna (s) por las que desea ordenar la consulta. ASC es el valor predeterminado, por lo que no necesita especificarlo. IE:

ORDER BY your_column 

... es el equivalente a:

ORDER BY your_column ASC 

ASC/DESC es en función de cada columna. Por ejemplo:

ORDER BY first_column, second_column DESC 

... significa que la consulta va a clasificar el conjunto de resultados como una combinación con el first_column en orden ascendente, second_column en orden descendente.

+0

El orden que necesito es el orden inverso en el que se insertaron las filas. "Primero insertado, primero fuera". – Steven

+1

@Steven: Deberá proporcionar el resultado de 'DESCRIBE [su nombre de tabla aquí]' de su base de datos antes de que pueda sugerir qué usar. Si tiene una columna de clave principal autonumber, ordene 'ASC'.Lo mejor sería una columna date_created, utilizando el tipo de datos datetime. Nuevamente, 'ASC'. –

1

A menos que pueda especificar un nombre de columna en una cláusula ORDER BY, no puede usar DESC, y tendrá que recurrir a trucos relacionados con LIMIT para ver los últimos registros.

Esto sería insatisfactorio, creo.

3

Puede configurar un contador en sus campos de resultados y el tipo de usarlo:

SELECT *, @counter := @counter + 1 AS 'counter' FROM tableName, (SELECT @counter := 0) r ORDER BY counter DESC 

creo que va a funcionar como se desea.

+1

¡SÍ! funciona ! Gracias ! Respondiste perfectamente a la pregunta. – Jerry

+0

@Jerry Pero esto es exactamente lo contrario del orden en que se recuperaron las filas, lo que no tiene ninguna conexión garantizada con el orden de implementación, que a su vez no garantiza que sea en particular. Si quiere una orden garantizada, tiene que estar en los datos. * Además * no hay garantías para las consultas que establecen y leen una variable, por lo que esta consulta tiene un comportamiento indefinido. Para * una cierta compilación reciente * de 5.7 personas en Percona que observaron la implementación, vieron que cierto uso de variables en expresiones de 'caso' (* no * como este) proporciona cierto comportamiento predecible. Hasta. – philipxy

Cuestiones relacionadas