1

mysql テーブルをソートしたい

select id,name from tbl order by name asc;

戻り値

1  name1
2  name2
4  name3
5  name4
8  name5

たとえば名前3がテーブルの最後に来るように注文する方法

select id,name from tbl order by ["name is name3????"],name asc;

戻り値

1  name1
2  name2
5  name4
8  name5
4  name3

ありがとうございました

4

1 に答える 1

4

case条件に基づいて値を返すことができます。したがって、他の名前には 1 を返しname3、他の名前には 0 を返すことができます。name3 を後ろに配置するために、主にこの値でソートします。2 番目の並べ替え値は名前であるため、他の名前は引き続きアルファベット順に並べ替えられます。

select 
  id, name 
from 
  tbl 
order by 
  case when name = 'name3' then 1 else 0 end,
  name

fieldストロベリーは、関数を使用してこれを達成することもできるとコメントで教えてくれました。これは、多数の名前に対して特定の並べ替えを指定する場合に特に便利で、よりコンパクトです。それを使用caseすると、すぐにかさばります。Field他の文字列のリストの最初の文字列のインデックスを返すfield(name, 'name3', 'name4')ため、'name3' の場合は 1、'name4' の場合は 2、その他すべての名前の場合は 0 を返します。

クエリは次のようになります。

select 
  id, name 
from 
  tbl 
order by 
  field(name, 'name3'),
  name
于 2013-07-19T09:02:47.053 に答える