130

3列のテーブルがあります:

id | name | priority
--------------------
 1 | core  |   10
 2 | core  |   9
 3 | other |   8
 4 | board |   7
 5 | board |   6
 6 | core  |   4

結果セットを使用して順序付けしたいのですが、優先度が低い場合でもpriority最初にそれらの行があります。name=core結果は次のようになります

id | name | priority
--------------------
 6 | core  |   4
 2 | core  |   9
 1 | core  |   10
 5 | board |   6
 4 | board |   7
 3 | other |   8
4

8 に答える 8

223

MySQLFIELD関数もあります。

考えられるすべての値を完全に並べ替えたい場合は、次のようにします。

SELECT id, name, priority
FROM mytable
ORDER BY FIELD(name, "core", "board", "other")

「コア」が最初で、他の値が重要でないことだけを気にする場合:

SELECT id, name, priority
FROM mytable
ORDER BY FIELD(name, "core") DESC

最初に「コア」でソートし、他のフィールドを通常のソート順でソートする場合:

SELECT id, name, priority
FROM mytable
ORDER BY FIELD(name, "core") DESC, priority

ただし、ここにはいくつかの注意事項があります。

まず、これは mysql のみの機能であると確信しています。質問には mysql のタグが付けられていますが、わかりません。

次に、動作に注意してください。値の1 から始まるインデックスFIELD()返します。 の場合、「コア」が値の場合は 1 を返します。フィールドの値がリストにない場合は、zeroを返します。可能なすべての値を指定しない限り、これが必要な理由です。FIELD(priority, "core")DESC

于 2014-08-21T18:07:45.467 に答える
102

一般的にあなたはすることができます

select * from your_table
order by case when name = 'core' then 1 else 2 end,
         priority 

特にMySQLでは、次のこともできます

select * from your_table
order by name <> 'core',
         priority 

MySQL での比較の結果は or のいずれかなので、その結果で 0ソート1できます。

于 2012-12-31T16:52:45.160 に答える
6

特定の行を優先する 1 つの方法は、優先度に大きな数値を追加することです。CASE次のステートメントでこれを行うことができます。

  select id, name, priority
    from mytable
order by priority + CASE WHEN name='core' THEN 1000 ELSE 0 END desc

デモ: http://www.sqlfiddle.com/#!2/753ee/1

于 2012-12-31T16:52:17.810 に答える
6

これは、Postgres 9 以降を使用している場合に機能します。

SELECT *
FROM your_table
ORDER BY name = 'core' DESC, priority DESC
于 2015-11-27T20:11:16.887 に答える
3

1つの方法はこれです:

select id, name, priority from table a
order by case when name='core' then -1 else priority end asc, priority asc
于 2012-12-31T16:52:04.407 に答える
1
SELECT * FROM cars_new WHERE status = '1' and car_hide !='1' and cname IN ('Executive Car','Saloon','MPV+','MPV5') ORDER BY FIELD(cname, 'Executive Car', 'Saloon','MPV+','mpv5')
于 2016-11-26T09:45:42.147 に答える