Ist es möglich, in MySQL nach "Reihenfolge nach" zu sortieren, indem ein vordefinierter Satz von Spaltenwerten (ID) verwendet wird, wie: Reihenfolge nach (ID = 1,5,4,3), so dass ich darin Datensatz 1, 5, 4, 3 erhalten würde bestellen?
UPDATE: Über den Missbrauch von MySQL ;-) Ich muss erklären, warum ich das brauche ...
Ich möchte, dass meine Datensätze alle 5 Minuten zufällig sortiert werden. Ich habe eine Cron-Aufgabe, die Aktualisierungstabelle zu erstellen, um eine andere, zufällige Sortierreihenfolge einzugeben. Es gibt nur ein Problem! SEITENNUMMERIERUNG. Ich werde einen Besucher haben, der auf meine Seite kommt, und ich gebe ihm die ersten 20 Ergebnisse. Er wird 6 Minuten warten und zu Seite 2 gehen, und er wird falsche Ergebnisse haben, da sich die Sortierreihenfolge bereits geändert hat.
Also dachte ich, wenn er auf meine Seite kommt, stelle ich alle IDs in eine Sitzung und wenn er auf Seite 2 ist, bekommt er die richtigen Datensätze heraus, auch wenn sich die Sortierung bereits geändert hat.
Gibt es eine andere Möglichkeit, dies besser zu tun?
Antworten:
Sie können die Funktionen ORDER BY und FIELD verwenden. Siehe http://lists.mysql.com/mysql/209784
Es verwendet die Funktion Field () , die laut Dokumentation "den Index (die Position) von str in der Liste str1, str2, str3, ... zurückgibt. Gibt 0 zurück, wenn str nicht gefunden wird". Sie sortieren also die Ergebnismenge nach dem Rückgabewert dieser Funktion, der der Index des Feldwerts in der angegebenen Menge ist.
quelle
Sie sollten in der Lage sein,
CASE
dies zu verwenden:quelle
In der offiziellen Dokumentation zu MySQL zu ORDER BY hat jemand Folgendes veröffentlicht, das Sie
FIELD
für diese Angelegenheit verwenden können:Dies ist ungetesteter Code, der theoretisch funktionieren sollte.
quelle
Wenn ich zum Beispiel 10 Registries hatte, werden auf diese Weise zuerst die ID 1, 5, 4 und 3 angezeigt, die anderen Registries als nächstes.
Normale Ausstellung 1 2 3 4 5 6 7 8 9 10
Auf diese Weise
8 5 4 3 1 2 6 7 9 10
quelle
Es gibt noch einen anderen Weg, dies zu lösen. Fügen Sie eine separate Tabelle hinzu:
Diese Tabelle wird nun verwendet, um Ihren eigenen Bestellmechanismus zu definieren.
Fügen Sie dort Ihre Werte hinzu:
... und ändern Sie dann Ihre SQL-Anweisung, während Sie dieser neuen Tabelle beitreten.
Diese Lösung ist etwas komplexer als andere Lösungen, aber mit dieser Lösung müssen Sie Ihre
SELECT
Aussage nicht ändern, wenn sich Ihre Bestellkriterien ändern. Ändern Sie einfach die Daten in der Auftragstabelle.quelle
quelle
ASC OR DESC
die richtige Syntax istWenn Sie im Ergebnis zuerst eine einzelne ID bestellen müssen, verwenden Sie die ID.
Wenn Sie mit einer Folge von mehreren IDs beginnen müssen, geben Sie eine Auflistung an, ähnlich wie Sie sie mit einer
IN
Anweisung verwenden würden.quelle
Wenn Sie eine einzelne ID als letztes im Ergebnis bestellen möchten, verwenden Sie die Reihenfolge für den Fall. (ZB: Sie möchten die Option "Andere" in der letzten und alle Stadtlisten werden in alphabetischer Reihenfolge angezeigt.)
Wenn ich zum Beispiel 5 Städte hatte, möchte ich die Stadt in alphabetischer Reihenfolge mit der Option "Andere" anzeigen, die zuletzt in der Dropdown-Liste angezeigt wird, dann können wir diese Abfrage verwenden. siehe Beispiel andere werden in meiner Tabelle unter der zweiten ID (ID: 2) angezeigt, daher verwende ich "wenn ID = 2" in der obigen Abfrage.
Datensatz in DB-Tabelle:
meine Ausgabe:
quelle