依特定順序的多值排序資料庫記錄
假設您有一個表,其中包含一個索引鍵和一個非索引欄位 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中文網其他相關文章!