web-dev-qa-db-ja.com

最初に特定のフィールド値による順序付け

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
66
Omid

MySQL FIELD関数 もあります。

すべての可能な値の完全なソートが必要な場合:

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というタグが付いていますが、あなたは決して知りません。

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

111
Nerdmaster

一般的にできること

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での比較の結果は0または1であり、その結果でソートできます。

87
juergen d

特定の行を優先する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

6
mellamokb

1つの方法は次のとおりです。

select id, name, priority from table a
order by case when name='core' then -1 else priority end asc, priority asc
3
Icarus

これは、Postgres 9+を使用している場合に有効です。

SELECT *
FROM your_table
ORDER BY name = 'core' DESC, priority DESC
3
Vojtech Vitek
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')
1
meiy arul

これを行う:

SELECT * FROM table ORDER BY column `name`+0 ASC

+0を追加すると、次のことを意味します。

0, 10, 11, 2, 3, 4

になります:

0, 2, 3, 4, 10, 11
0
Madhuka Dilhan