Ich habe eine Frage Ich bin auf ein interessantes Stück Code gestoßen. In der MySQL-Anweisung gibt es etwas wie:
{...} ORDER BY was auch immer = 3 ASC, was auch immer = 4 ASC, was auch immer = 6 ASC {...}
Bedeutet das, dass es auf diese Weise geordnet wird?:
%Vor%Es scheint nur das zu sortieren, was gleich 3, 4 und 6 ist ungeordnet ...
Ist das eine richtige / unterstützte Syntax?
whatever=3
wird als Boolean mit 0
als falsch und 1
als true
ausgewertet.
Da es aufsteigend bestellt wird, werden diejenigen zuerst bestellt, die die Bedingung nicht erfüllen. Dann kommt die zweite Sortierspalte whatever=4
ins Spiel, also diejenigen, in denen whatever=4
zuletzt in dieser Gruppe sein wird und so weiter.
Für diejenigen, bei denen whatever
nicht in (3,4,6)
ist, wird keine Reihenfolge angegeben, die als Tiebreaker dient, und die Reihenfolge ist beliebig.
Es wird Syntax in MySQL unterstützt, aber nicht Standard oder Portable.
Tatsächlich ordnet es sich nach dem Vergleichsergebnis an, was ein boolescher Wert von 0 oder 1 ist. Der resultierende Code ist etwas wie (Pseudocode):
%Vor%Was am Ende kommt (wenn der Wert in der Liste ist),
%Vor%und wenn der Wert nicht in der Liste ist:
%Vor%So werden Werte, die nicht in der Liste enthalten sind, mit demselben Wert betrachtet und nicht geordnet, und die Werte in der Liste werden basierend auf der Position in der Liste geordnet.
Sie können dies durch ORDER BY FIELD(whatever, 3,4,6)
( Dokumentation ) ersetzen.
Tags und Links sql mysql sql-order-by