• # ASC ou DESC

    Posté par . En réponse au message Base de donnée temporelle. Évalué à 6.

    Hello,

    Tous les événements stockés ont pour dénominateur commun d'être datés et, plus l'événement est récent, plus il est pertinent. Notons également qu'ils sont ajoutés chronologiquement à la base de données. Ainsi, la première entrée d'une table est la plus ancienne.

    Tu ne peux pas faire cette hypothèse sans colonne « date » explicite. Une table est considérée comme un ensemble non ordonné. Par exemple, sur SQLPro, l'auteur la présente comme un « sac de billes », ce qui est une métaphore assez parlante. Ça veut dire également, et notamment, que tu peux compter le nombre de tuples identiques dans ta table mais que tu ne peux pas les distinguer les uns des autres (ce qui sera important quand tu voudras en supprimer un).

    Dans ta table, donc, tous tes enregistrements sont placés « là où il y a de la place ». Ça veut dire que tant que tu ne fais qu'insérer des enregistrements, ils vont tous se mettre les uns à la suite des autres, donc dans l'ordre chronologique. Mais dès que tu vas supprimer un enregistrement au milieu de ta table, celui ne sera en fait que « rayé » et le prochain enregistrement que tu vas insérer va prendre sa place.

    Si tu veux garantir l'ordre chronologique sans avoir à trier explicitement ta table à chaque requête, il faut ajouter la colonne date, créer un index sur cette colonne et en faire un « clustered index » si tu veux que ta table soit physiquement triée suivant cette colonne.

    Lorsque MySQL parcourt une table, il la parcourt du début à la fin, et donc, de l'entrée la moins pertinente à l'entrée la plus pertinente. Dans le cas d'une requête simple, l'opérateur ORDER BY peut être utilisé afin d'inverser l'ordre. En revanche, dans le cas d'une jointure, cela devient beaucoup plus complexe.

    « ORDER BY » s'applique sur le résultat, et pas sur les colonnes de la requête au préalable. Tu peux donc trier sans distinction le résultat issu d'une requête simple ou avec jointure. Tu peux également spécifier plusieurs colonnes, séparées par des virgules, pour trier tes tuples selon une première colonne, puis une seconde lorsque les champs de la première sont tous identiques, etc.

    D'autre part, le tri effectué par ORDER est croissant par défaut, mais tu peux à tout moment spécifier le sens avec « ASC » ou « DESC ».

    $ SELECT A.date , B.Comment from A,B where A.FieldB = B.Field
    -> 2010 'com1'
    Or j'aimerais que le résultat de la requête soit :
    -> 2010 'com2'

    Tu peux te référer à une colonne même si elle n'est pas sélectionnée. Donc :

    SELECT A.date , B.Comment from A,B where A.FieldB = B.Field ORDER BY B.Date DESC;