Es gibt auch die MySQL- FIELD
Funktion .
Wenn Sie eine vollständige Sortierung für alle möglichen Werte wünschen:
SELECT id, name, priority
FROM mytable
ORDER BY FIELD(name, "core", "board", "other")
Wenn Sie sich nur darum kümmern, dass "Kern" an erster Stelle steht und die anderen Werte keine Rolle spielen:
SELECT id, name, priority
FROM mytable
ORDER BY FIELD(name, "core") DESC
Wenn Sie zuerst nach "Kern" und den anderen Feldern in normaler Sortierreihenfolge sortieren möchten:
SELECT id, name, priority
FROM mytable
ORDER BY FIELD(name, "core") DESC, priority
Hier gibt es jedoch einige Einschränkungen:
Erstens bin ich mir ziemlich sicher, dass dies nur eine MySQL-Funktion ist - die Frage ist mit MySQL gekennzeichnet, aber Sie wissen es nie.
Zweitens sollten Sie darauf achten, wie es FIELD()
funktioniert: Es gibt den einbasierten Index des Werts zurück - im Fall von FIELD(priority, "core")
gibt es 1 zurück, wenn "core" der Wert ist. Wenn der Wert des Feldes nicht in der Liste enthalten ist, wird Null zurückgegeben . Aus diesem Grund DESC
ist dies erforderlich, sofern Sie nicht alle möglichen Werte angeben.
Im Allgemeinen können Sie tun
Besonders in MySQL können Sie das auch tun
Da das Ergebnis eines Vergleichs in MySQL entweder
0
oder ist1
und Sie nach diesem Ergebnis sortieren können.quelle
1
und2
bedeutet hier?1
und2
sind nur 2 Zahlen, mit denen ich die Daten sortiere. Könnte sein3
und4
oder etwas anderes.%
in derWHERE
Klausel gibt? Wie. . . WHERE name LIKE '%sth%' . . .
? stackoverflow.com/questions/41303379/…Eine Möglichkeit, bestimmten Zeilen den Vorzug zu geben, besteht darin, ihrer Priorität eine große Zahl hinzuzufügen. Sie können dies mit einer
CASE
Aussage tun :Demo: http://www.sqlfiddle.com/#!2/753ee/1
quelle
Dies funktioniert bei mir mit Postgres 9+:
quelle
Ein Weg ist folgender:
quelle
core
Zeilen?quelle
mach das:
Das Anhängen von +0 bedeutet Folgendes:
wird :
quelle
Benutze das:
quelle