Es gibt ein Feld 'noticeBy' enum ('E-Mail', 'mobile', 'alle', 'auto', 'nichts') NOT NULL DEFAULT 'auto'. Wie es bekannt ist, verhält sich das Ordnen durch das ENUM-Feld relativ zu seinem Index. Wie aber macht es Ordnung durch seine Werte?ORDER BY "ENUM Feld" in MYSQL
Antwort
Wie unter Sorting dokumentiert:
ENUM
Werte werden basierend auf ihren Indexnummern sortiert, die von der Reihenfolge abhängen, in der die Aufzählungselemente in der Spaltenspezifikation aufgeführt wurden. Beispiel:'b'
sortiert vor'a'
fürENUM('b', 'a')
. Die leere Zeichenfolge sortiert vor nicht leeren Strings und die WerteNULL
sortieren vor allen anderen Enumerationswerten.Um unerwartete Ergebnisse zu verhindern, wenn die
ORDER BY
Klausel auf eineENUM
Spalte, eine dieser Techniken verwenden:
Geben Sie die
ENUM
Liste in alphabetischer Reihenfolge.Stellen Sie sicher, dass die Spalte lexikalisch sortiert ist und nicht nach Indexnummer, indem Sie
ORDER BY CAST(col AS CHAR)
oderORDER BY CONCAT(col)
codieren.
Per zweiten Kugel, können Sie daher sortieren auf der Säule, nachdem es cast gewesen in einen String hat:
ORDER BY CAST(noticeBy AS CHAR)
Sie können Ihre Bestellung definieren wie Sie wollen:
ORDER BY CASE noticeBy
WHEN 'email' THEN 1
WHEN 'mobile' THEN 2
WHEN 'all' THEN 3
WHEN 'auto' THEN 4
ELSE 5
END
Dadurch werden die Zeilen in der folgenden Reihenfolge zurück: E-Mail, Handy, alles, Auto, nichts.
Dies funktioniert auch:
ORDER BY FIELD(noticeBy, 'all','auto','email','mobile','nothing')
(ich glaube nicht, dass es eine Einstellung, um dies zu erreichen ist, können Sie die Art-Werte zu bieten haben.)
Diese Art der Sortierung von ENUM kann in einigen Fällen sehr nützlich sein! Es funktioniert wirklich, ich habe es versucht :) –
perfekt genau das, was ich gesucht habe – Andrew
- 1. MySQL Leistungsoptimierung: Order by Datetime Feld
- 2. MySQL ORDER BY erstes Feld dann zweites Feld
- 3. MySQL: Wie GROUP BY ein Feld, um die Zeilen mit ORDER BY einem anderen Feld abzurufen?
- 4. GROUP BY Anzahl der Zeilen von GROUP BY in MySQL
- 5. MySQL ORDER BY IN()
- 6. MySQL Enum Leistungsvorteil?
- 7. MySQL: ORDER BY Ausdruck?
- 8. MySQL GROUP BY Problem
- 9. Elasticsearch Enum Feld
- 10. MySQL ORDER BY Datum Feld, das nicht im Datumsformat ist
- 11. MySQL "Group By" und "Order By"
- 12. MySQL Zeilenposition in ORDER BY
- 13. Mysql GROUP BY und ORDER BY DESC
- 14. MySQL SELECT GROUP BY
- 15. MySQL GROUP BY Betreff
- 16. MySQL ORDER BY FIELD mit%
- 17. Java - Enum mit Array-Feld
- 18. GROUP BY inverse (mysql)
- 19. Bestücken Feld aus enum Tabelle
- 20. Complex mysql ORDER BY
- 21. Erstellen ENUM Variablentyp in MySQL
- 22. GROUP BY & ORDER BY - Sortierung nach einem bestimmten Feld
- 23. MySQL Enum mit Hibernate
- 24. Komma Feld in mysql
- 25. Mysql Select Enum Werte
- 26. Java enum zu mysql enum in vorbereitete Anweisung
- 27. ORDER BY brechen mysql query
- 28. Enum in Hibernate, persistierende als Enum
- 29. Mysql ORDER BY bestimmten Wert
- 30. Standardsortierreihenfolge in MySQL (ALTER TABLE ... ORDER BY ...;)
Dieser wird auch in SQLite arbeiten. – nuqqsa