Isih berbilang nilai rekod pangkalan data dalam susunan tertentu
Andaikan anda mempunyai jadual dengan kunci diindeks dan medan tidak diindeks x_field
. Anda perlu mencari semua rekod dengan nilai tertentu dan mengembalikannya, dan menyusun keputusan berdasarkan berbilang nilai dalam susunan tertentu.
Sebagai contoh, jika anda mempunyai jadual berikut:
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 |
dan anda ingin mengisih keputusan dalam susunan berikut, di mana urutannya 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 |
Anda pada mulanya cuba menggunakan pertanyaan berikut:
<code class="language-sql">SELECT * FROM table WHERE id NOT IN (126) ORDER BY x_field 'f', 'p', 'i', 'a'</code>
Walau bagaimanapun, pertanyaan ini tidak mengembalikan hasil.
Cara untuk menyelesaikan masalah ini ialah dengan menggunakan pernyataan CASE
untuk memberikan nilai berangka kepada setiap nilai x_field
mengikut susunan yang dikehendaki:
<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>
Pertanyaan ini memberikan nilai 1 kepada nilai x_field
sama dengan 'f', nilai 2 kepada nilai sama dengan 'p', nilai 3 kepada nilai sama dengan 'i' dan nilai 4 kepada Sama dengan nilai 'a'. Untuk nilai yang tiada dalam klausa IN
(cth. 'b'), nilai sandaran 5 diberikan. Hasilnya kemudian diisih dalam tertib menaik berdasarkan nilai angka ini dan medan id
.
Pendekatan ini memastikan bahawa keputusan diisih mengikut tertib yang diingini, walaupun x_field
nilai tidak dalam tertib menurun/menaik.
Atas ialah kandungan terperinci Bagaimana untuk Memesan Rekod Pangkalan Data dengan Berbilang Nilai dalam Urutan Tertentu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!