Nacky - Snowland.net

Nacky(Issei Ishii)がDJ/Composerのようなふりして書き散らすblogサイト

Info

Nacky - Snowland.net - blogを移転しました

2010-03-13

MySQLで任意の順番でソートする

「このカラム内,2~3~1の順番でソートして欲しいんですけど!」

2,3,1でそれぞれSELECTして最後にUNIONするしかないか,と思ったが,
MySQLの場合はORDER BY field({colname},{val}[,val...]) という感じで書けるらしい.

nametype
A1
B2
C3
D4

というテーブルordertestがあったとして
SELECT * FROM ordertest ORDER BY field(type,2,1,4,3);
B 2
A 1
D 4
C 3
という感じで行ける.
しかし中途半端に指定した場合はそこだけ有効になる.
SELECT * FROM ordertest ORDER BY field(type,4,2);
A 1
C 3
D 4
B 2
という感じ.
fieldに指定されなかった部分は不定のようです? アテにしないほうがよさげ.

ORDER BY filed(~),field(~) と指定することもできます.
これとCASE文の組み合わせで結構いろいろできますね.

posted at 14:18:53 on 2010-03-13 by nacky - Category: Com/Tech ( Database )

ソニーストア

TrackBack

Comments

HoLY wrote:

filed じゃなく field かな。
こういうのもあるのは知らなかった。

http://dev.mysql.com/doc/re...

によれば、引数に出てこなかった要素は「0」になるから、それらの順序は一応不定ですな。

ちなみに自分なら Field() 使わないならきっとこうしてた。(2,1,4,3 に並べるとして、
)

ORDER BY age <> 2, age <> 1, age <> 4, age <> 3;
2010-03-16 03:16:13

nacky wrote:

おおう,typo指摘ありがとうございます.
filed→fieldに修正しておきます.
2010-03-16 13:09:08