Mehrwertige Sortierung von Datenbankeinträgen in einer bestimmten Reihenfolge
Angenommen, Sie haben eine Tabelle mit einem indizierten Schlüssel und einem nicht indizierten Feld x_field
. Sie müssen alle Datensätze mit einem bestimmten Wert finden und zurückgeben und die Ergebnisse basierend auf mehreren Werten in einer bestimmten Reihenfolge sortieren.
Zum Beispiel, wenn Sie die folgende Tabelle haben:
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 |
und Sie möchten die Ergebnisse in der folgenden Reihenfolge sortieren, wobei die Reihenfolge x_field = 'f', 'p', 'i', 'a'
ist:
id | x_field |
---|---|
127 | f |
133 | p |
134 | p |
135 | i |
123 | a |
124 | a |
125 | a |
129 | a |
Sie haben zunächst versucht, die folgende Abfrage zu verwenden:
<code class="language-sql">SELECT * FROM table WHERE id NOT IN (126) ORDER BY x_field 'f', 'p', 'i', 'a'</code>
Diese Abfrage liefert jedoch keine Ergebnisse.
Die Möglichkeit, dieses Problem zu lösen, besteht darin, die CASE
-Anweisung zu verwenden, um jedem x_field
-Wert entsprechend der gewünschten Reihenfolge einen numerischen Wert zuzuweisen:
<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>
Diese Abfrage weist dem x_field
-Wert gleich „f“ den Wert 1, dem Wert gleich „p“ den Wert 2, dem Wert gleich „i“ den Wert 3 und dem Wert gleich „i“ den Wert 4 zu Entspricht dem Wert von „a“. Für Werte, die nicht in der IN
-Klausel enthalten sind (z. B. „b“), wird ein Fallback-Wert von 5 zugewiesen. Die Ergebnisse werden dann basierend auf diesem numerischen Wert und dem Feld id
in aufsteigender Reihenfolge sortiert.
Dieser Ansatz stellt sicher, dass die Ergebnisse in der gewünschten Reihenfolge sortiert werden, auch wenn x_field
die Werte nicht in absteigender/aufsteigender Reihenfolge vorliegen.
Das obige ist der detaillierte Inhalt vonWie ordne ich Datenbankeinträge nach mehreren Werten in einer bestimmten Reihenfolge?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!