昇順、降順をしばしば間違えそうになるので整理する。
昇順と降順
昇順は小さいものから順番に、降順は大きいものから順番に並べる。昇や降の漢字が当てられているから、昇るとか降るとかと考えて見た目上の位置関係と勘違いしてしまい混乱するが、そうではない。先頭から数えた時の大小関係を考えるのが正しい。
以下のくだものの価格表は、価格の一番小さいりんごから順に並べているので昇順となる。
| くだもの | 価格 |
|---|---|
| りんご | 100 |
| みかん | 200 |
| すいか | 300 |
以下のくだものの価格表は、価格の一番大きなすいかから順に並べているので降順となる。
| くだもの | 価格 |
|---|---|
| すいか | 300 |
| みかん | 200 |
| りんご | 100 |
SQL
SQLでは ORDER BY を使い、並べ替えを行う。その時 ASC を付ければ昇順、 DESC を付ければ降順となる。省略した場合は ASC となる。
SELECT * FROM foo ORDER BY id ASC; -- または SELECT * FROM foo ORDER BY id;
SELECT * FROM foo ORDER BY id DESC;
Django
DjangoにはORMが付属している。それは最終的にはSQLになるのだが、ORMのやり方に乗っとった指定の仕方をする必要がある。
order_by メソッドにカラム名を指定する事で ORDER BY 実行される。
YourModel.objects.order_by("created_at")ASCではなくDESCにしたい場合は、 - を指定する。
YourModel.objects.order_by("-created_at")そもそも最初から ORDER BY ... DESC されるようにMetaで指定する事もできる。
class YourModel(models.Model):
created_at = models.DateTimeField(auto_now=True, auto_now_add=True,)
class Meta:
ordering = ("'-created_at",)ただこの指定は、後からコードを読む人にとっては混乱の元になりそうかとも思うので、あまり使いたくない。