ホームページ > データベース > mysql チュートリアル > 特定のシーケンス内の複数の値によってデータベース レコードを並べ替えるにはどうすればよいですか?

特定のシーケンス内の複数の値によってデータベース レコードを並べ替えるにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-08 18:12:41
オリジナル
107 人が閲覧しました

How to Order Database Records by Multiple Values in a Specific Sequence?

データベース レコードを特定の順序で複数値で並べ替えます

インデックス付きキーとインデックスなしフィールド x_field を持つテーブルがあるとします。特定の値を持つすべてのレコードを検索して返し、複数の値に基づいて結果を特定の順序で並べ替える必要があります。

たとえば、次のテーブルがあるとします。

id x_field
123 a
124 a
125 a
126 b
127 f
128 b
129 a
130 x
131 x
132 b
133 p
134 p
135 i

で、結果を次の順序で並べ替えたいとします。順序は x_field = 'f', 'p', 'i', 'a' です:

id x_field
127 f
133 p
134 p
135 i
123 a
124 a
125 a
129 a

最初に次のクエリを使用しようとしました:

<code class="language-sql">SELECT *
FROM table
WHERE id NOT IN (126)
ORDER BY x_field 'f', 'p', 'i', 'a'</code>
ログイン後にコピー

ただし、このクエリは結果を返しません。

この問題を解決する方法は、CASE ステートメントを使用して、目的の順序に従って各 x_field 値に数値を割り当てることです。

<code class="language-sql">...
WHERE
   x_field IN ('f', 'p', 'i', 'a') ...
ORDER BY
   CASE x_field
      WHEN 'f' THEN 1
      WHEN 'p' THEN 2
      WHEN 'i' THEN 3
      WHEN 'a' THEN 4
      ELSE 5 -- 对不在 IN 子句中的值(例如:x_field = 'b')的回退值
   END, id</code>
ログイン後にコピー

このクエリは、値 1 を 'f' に等しい x_field 値に、値 2 を 'p' に等しい値に、値 3 を 'i' に等しい値に、値 4 を「a」の値と同じです。 IN 句にない値 (例: 'b') には、フォールバック値 5 が割り当てられます。次に、結果はこの数値と id フィールドに基づいて昇順に並べ替えられます。

このアプローチにより、x_field値が降順/昇順になっていない場合でも、結果が目的の順序で並べ替えられます。

以上が特定のシーケンス内の複数の値によってデータベース レコードを並べ替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート