1. ホーム
  2. mysql

[解決済み] mySQLでカスタムORDER BYオーダーを定義する方法

2022-04-23 06:50:42

質問

MySQLで、カスタムソート順を定義するにはどうしたらいいですか?

私が欲しいものを説明するために、次のテーブルを考えてみてください。

ID  Language    Text
0   ENU         a
0   JPN         b
0   DAN         c       
1   ENU         d
1   JPN         e
1   DAN         f
2   etc...

ここでは、すべての行を言語とIDの昇順でソートして、言語=ENUが最初に来て、次にJPN、最後にDANとなるように返したいのです。

結果は、a,d,b,e,c,f などになるはずです。

こんなことが可能なのでしょうか?

どのように解決するのですか?

MySQLには FIELD() このような作業には最適です。

ORDER BY FIELD(Language,'ENU','JPN','DAN'), ID

ただし

  1. 他のDBMSにはこのような機能がない可能性があるため、SQLの移植性が低くなります。

  2. 言語 (またはソートする他の値) のリストが長くなってきたら、それらのために sortorder カラムを持つ別のテーブルを用意し、それを順序付け用のクエリーに結合する方がよいでしょう。