2009-11-27 13 views
5

In Mysql, quando si esegue un'istruzione SQL selezionata, esiste un ordine predefinito se non si include una clausola di ordinamento, come annullare l'ordinamento predefinito? Basta aggiungere DESC?Come invertire l'ordinamento predefinito in Mysql?

+0

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

+0

Non esiste un "ordine predefinito" quindi non puoi "invertirlo". –

risposta

3

Non esiste un ordine garantito se non si specifica una clausola ORDER BY, quindi il "reverse dell'ordine predefinito" non è definito.

+0

Per coloro che preferiscono le risposte con prove per eseguire il backup delle affermazioni fatte: https://stackoverflow.com/questions/8746519/sql-what-is-the-default-order-by-of-queries – Patrick

1

Penso che sarebbe meglio servire specificando l'ordine che si desidera effettivamente. Le tabelle, per loro natura, non hanno ordine. Probabilmente viene visualizzato solo nell'ordine in cui sono state inserite le righe, sebbene non ci sia alcuna garanzia che rimanga in tale ordine.

Le probabilità sono, probabilmente vuole solo aggiungere questo:

ORDER BY id DESC 

... poiché la maggior parte del tempo, la gente usa un campo di incremento automatico chiamato "id"

+0

Ma che peccato, non c'è un campo "Id" nella tabella. – Steven

+0

Ma se non esiste un campo Id o equivalente, l'ordine è significativo? – pavium

+0

Penso che l'ordine di default in cui sono state inserite le righe, l'ordine di default è "First inserted, last out". Voglio cambiarlo in "First inserted, first out". – Steven

5

Se si desidera che il i dati per uscire coerentemente ordinati, è necessario utilizzare ORDER BY seguito dalla colonna (s) che si desidera ordinare la query. ASC è l'impostazione predefinita, quindi non è necessario specificarlo. IE:

ORDER BY your_column 

... è l'equivalente di:

ORDER BY your_column ASC 

ASC/DESC è su una base per colonna. Ad esempio:

ORDER BY first_column, second_column DESC 

... significa che la query ordinerà del risultato come una combinazione usando l'first_column in ordine crescente, second_column in ordine decrescente.

+0

L'ordine di cui ho bisogno è l'ordine inverso in cui sono state inserite le righe. "Prima inserito, prima uscita". – Steven

+1

@Steven: Dovrai fornire l'output di 'DESCRIVERE [il nome della tua tabella qui]' dal tuo database prima che io possa suggerire cosa usare. Se si dispone di una colonna chiave autonome principale, ordinare "ASC".La prossima cosa migliore sarebbe una colonna date_created, usando il datatype datetime. Di nuovo, 'ASC'. –

1

A meno che non sia possibile specificare un nome di colonna in una clausola ORDER BY, non è possibile utilizzare DESC e sarà necessario ricorrere a trucchi che prevedono LIMIT per visualizzare gli ultimi record.

Questo sarebbe insoddisfacente, penso.

3

È possibile impostare un contatore nei campi di risultato e una sorta di utilizzarlo:

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

penso che funzionerà come si desidera.

+1

SI !! Funziona ! Grazie ! Hai risposto perfettamente alla domanda. – Jerry

+0

@Jerry Ma questo è esattamente il contrario di qualsiasi ordine in cui sono state richiamate le righe, che non ha alcuna connessione garantita con l'ordine di implementazione, che a sua volta non ha alcuna garanzia di essere qualcosa in particolare. Se vuoi un ordine garantito, deve essere nei dati. * Inoltre * non ci sono garanzie per le query che impostano e leggono una variabile, quindi questa query ha un comportamento non definito. Per * una certa build recente * di 5,7 persone a Percona che ha esaminato l'implementazione ha visto che un certo uso di variabili nelle espressioni 'case' (* non * come questo) fornisce alcuni comportamenti prevedibili. Fino a. – philipxy