2009-11-27 7 views
5

Dans Mysql, lorsque vous exécutez une instruction SQL select, il existe un ordre par défaut si vous n'incluez pas de clause de tri, comment inverser l'ordre par défaut? Il suffit d'ajouter DESC?Comment annuler la commande par défaut dans Mysql?

+0

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

+0

Il n'y a pas de «commande par défaut» donc vous ne pouvez pas "inverser". –

Répondre

3

Il n'y a pas de commande garantie si vous ne spécifiez pas de clause ORDER BY, ainsi le 'reverse de l'ordre par défaut' est indéfini.

+0

Pour ceux qui préfèrent des réponses avec des preuves pour sauvegarder les revendications faites: https://stackoverflow.com/questions/8746519/sql-what-is-the-default-order-by-of-queries – Patrick

1

Je pense que vous seriez mieux servi en spécifiant la commande que vous voulez réellement. Les tables, par leur nature, n'ont pas d'ordre. Il est probablement juste affiché dans l'ordre dans lequel les lignes ont été insérées - bien qu'il n'y ait aucune garantie qu'il restera dans cet ordre.

Les chances sont, vous voulez probablement juste ajouter ceci:

ORDER BY id DESC 

... puisque la plupart du temps, les gens utilisent un champ auto-incrémentée appelé « id »

+0

Mais quel dommage, il n'y a pas de champ "Id" dans la table. – Steven

+0

Mais s'il n'y a pas de champ Id, ou équivalent, l'ordre est-il significatif? – pavium

+0

Je pense que l'ordre par défaut dans lequel les lignes ont été insérées, l'ordre par défaut est "Première insertion, dernière sortie". Je veux le changer en "Premier inséré, premier sorti". – Steven

5

Si vous voulez que la données à sortir systématiquement commandé, vous devez utiliser ORDER BY suivi de la colonne (s) que vous souhaitez commander la requête par. ASC est la valeur par défaut, vous n'avez donc pas besoin de le spécifier. IE:

ORDER BY your_column 

... est l'équivalent de:

ORDER BY your_column ASC 

ASC/DESC est sur une base par colonne. Par exemple:

ORDER BY first_column, second_column DESC 

... signifie que la requête triera ResultSet comme une combinaison en utilisant le first_column dans l'ordre croissant, second_column dans l'ordre décroissant.

+0

L'ordre dont j'ai besoin est l'ordre inverse dans lequel les lignes ont été insérées. "Premier inséré, premier sorti". – Steven

+1

@Steven: Vous devrez fournir la sortie de 'DESCRIBE [votre nom de table ici]' depuis votre base de données avant de pouvoir suggérer quoi utiliser. Si vous avez une colonne de clé primaire autonumber - commandez par elle 'ASC'.La meilleure chose à faire serait une colonne date_created, utilisant le datatype datetime. Encore une fois, 'ASC'. –

1

Sauf si vous pouvez spécifier un nom de colonne dans une clause ORDER BY, vous ne pouvez pas utiliser DESC et vous devrez recourir à des astuces impliquant LIMIT pour voir les derniers enregistrements.

Ce serait insatisfaisant, je pense.

3

Vous pouvez définir un compteur dans vos champs de résultat et de trier l'utiliser:

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

Je pense que cela va fonctionner comme vous le souhaitez.

+1

OUI !! Ça marche ! Merci ! Vous avez parfaitement répondu à la question. – Jerry

+0

@Jerry Mais c'est exactement l'inverse de l'ordre dans lequel les lignes ont été récupérées, qui n'a aucune connexion garantie avec l'ordre d'implémentation, ce qui à son tour ne garantit rien de particulier. Si vous voulez une commande garantie, elle doit figurer dans les données. * Aussi, il n'y a aucune garantie pour les requêtes qui définissent et lisent une variable, donc cette requête a un comportement indéfini. Pour * une certaine construction récente * de 5,7 personnes à Percona qui a regardé l'implémentation a vu que certaines utilisation de variables dans des expressions 'case' (* pas * comme ceci) donne un certain comportement prévisible. Jusqu'à. – philipxy

Questions connexes