首頁 > 資料庫 > 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板