MySQL-Reihenfolge innerhalb einer IN()-Funktion
Beim Ausführen einer Abfrage mit einer IN()-Klausel kann es wünschenswert sein, die zu sortieren zurückgegebene Artikel basierend auf der Reihenfolge, in der sie in der Funktion angegeben wurden. Standardmäßig garantiert MySQL diese Reihenfolge nicht.
Betrachten Sie das folgende Beispiel:
SELECT id, name FROM mytable WHERE name IN ('B', 'A', 'D', 'E', 'C');
Die erwartete Ausgabe könnte in der Reihenfolge sortiert werden, in der die Werte in die Funktion IN() eingegeben wurden:
id | name |
---|---|
5 | B |
6 | B |
1 | D |
15 | E |
17 | E |
9 | C |
18 | C |
Stattdessen wendet MySQL möglicherweise seinen eigenen Sortieralgorithmus an, was zu einem anderen Ergebnis führen kann Reihenfolge.
Lösung:
Um die gewünschte Reihenfolge sicherzustellen, stellt MySQL die Funktion FIELD() zur Verfügung. Diese Funktion nimmt einen String und eine Reihe von Strings und gibt die Position des ersten Strings innerhalb der nachfolgenden Argumente zurück.
Durch die Verwendung von FIELD() können Sie die Ausgabe wie folgt sortieren:
SELECT id, name FROM mytable WHERE name IN ('B', 'A', 'D', 'E', 'C') ORDER BY FIELD(name, 'B', 'A', 'D', 'E', 'C')
Diese Abfrage stellt sicher, dass die Zeilen in der in der IN()-Funktion angegebenen Reihenfolge zurückgegeben werden.
Leistung Optimierung:
Während die FIELD()-Funktion die gewünschte Funktionalität erfüllt, ist es wichtig, Auswirkungen auf die Leistung zu berücksichtigen. Bei großen Datensätzen kann die Verwendung einer indizierten Spalte, die speziell für die Sortierung entwickelt wurde, die Leistung erheblich verbessern.
Das obige ist der detaillierte Inhalt vonWie können Sie die Reihenfolge der Ergebnisse in einer MySQL IN()-Funktion steuern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!