DittoのorderByパラメータによる、複数フィールドを使った並べ替え(ソート)

Dittoで並べ替え(ソート)を指定する方法に、「sortBy」と「sortDir」パラメータによる、単一のフィールドを使った並べ替え指定がありますが、これ以外に、「orderBy」パラメータを使って、複数のフィールドを使った並べ替え(ソート)を指定することができます。

例)

[!Ditto? &ordeBy=`menuindex ASC,pub_date DESC` &language=`japanese-utf8`!]

この例では、メニューインデックスの昇順に並べ替え、メニューインデックスが同じものについては公開開始日時の降順に並べ替えるように指定しています。

このように、複数のフィールドはカンマ「,」で区切り、並べ替えの方向は、フィールド名の後ろに空白1文字をはさんで指定します。(並べ替えの方向を省略した場合は昇順になります/sortDirの場合は省略時は降順なので注意が必要です)

なお、「orderBy」を指定した場合、他に「sortBy」や「sortDir」を指定していても、「sortBy」や「sortDir」は無視されます。

ちなみに、実装としては、「orderBy」パラメータが、そのままSQLに使われるとは限りません。

■まとめ:Dittoの並べ替え(ソート)指定パラメータ

パラメータ 機能 指定内容
sortBy 単一フィールドによる並べ替え フィールド名(ドキュメント変数名やテンプレート変数名)、省略時は「createdon」
sortDir 単一フィールドによる並べ替え 並べ替え方向(「ASC(昇順)」または「DESC(降順)」)、省略時は「DESC」
orderBy 単一または複数フィールドによる並べ替え 「<フィールド名><空白1文字><並べ替え方向>」。複数指定時はこれをカンマでつないで指定、先に指定したフィールドから優先的に並べ替えられる。並べ替え方向は「ASC(昇順)」または「DESC(降順)」で省略可能(直前の空白とともに)、省略時は「ASC」。orderByが指定された場合は、sortBy、sortDirは無視される。
randomize ランダムに並べ替え 0(off:デフォルト)、1(on)、または、フィールド名。randomizeが指定された(0以外の)場合は、sortBy、sortDir、orderByは無視される。

▼追記
りゅうさんのコメントを参考にコードを変更しました。