1. ホーム
  2. mysql

[解決済み] 特定のフィールドの値から順に並べる

2022-07-12 01:32:11

質問

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

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

また MySQL FIELD 機能 .

可能なすべての値に対して完全なソートを行いたい場合。

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

もし、"core"が最初にあることだけを気にして、他の値は重要でないのであれば。

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

最初に "core" でソートし、他のフィールドは通常のソート順でソートしたい場合。

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

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

まず、これはmysqlだけの機能であることは間違いありません - 質問にはmysqlのタグが付いていますが、わからないでしょう。

第二に、どのように FIELD() の動作に注目してください。 1ベースインデックス を返します。 FIELD(priority, "core") の場合、quot;core" が値であれば1を返す。 フィールドの値がリストにない場合、それは ゼロ . このため DESC が必要なのは、可能な限りの値を指定しないためです。