データベース レコードを特定の順序で複数値で並べ替えます
インデックス付きキーとインデックスなしフィールド 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 サイトの他の関連記事を参照してください。