Istnieje pole "noticeBy" enum ("email", "mobile", "all", "auto", "nic") NOT NULL DEFAULT "auto". Jak wiadomo, porządkowanie przez pole ENUM odbywa się względem jego indeksu. Jak jednak można uporządkować według jej wartości?ORDER BY "pole ENUM" w MYSQL
Odpowiedz
Jak udokumentowano pod Sorting:
ENUM
Wartości są sortowane na podstawie ich numerów indeksowych, które zależą od kolejności występowania elementów wyliczeniowych w specyfikacji kolumny. Na przykład'b'
sortuje przed'a'
dlaENUM('b', 'a')
. Pusty łańcuch sortuje przed niepustymi ciągami, a wartości przed wszystkimi innymi wartościami wyliczenia sortuje.Aby zapobiec niespodziewane wyniki przy użyciu klauzuli
ORDER BY
na kolumnieENUM
użyć jedną z tych technik:
określić listę w kolejności alfabetycznej
ENUM
.Upewnij się, że kolumna jest posortowana leksykalnie, a nie według numeru indeksu, kodując
ORDER BY CAST(col AS CHAR)
lubORDER BY CONCAT(col)
.
Za drugim pociskiem, można zatem porządek na kolumnie po jego cast do łańcucha:
ORDER BY CAST(noticeBy AS CHAR)
Można zdefiniować swoje zamówienie jednak chcesz:
ORDER BY CASE noticeBy
WHEN 'email' THEN 1
WHEN 'mobile' THEN 2
WHEN 'all' THEN 3
WHEN 'auto' THEN 4
ELSE 5
END
ten powróci wiersze w następującej kolejności: e-mail, telefon komórkowy, wszystko, auto, nic.
Działa to również:
ORDER BY FIELD(noticeBy, 'all','auto','email','mobile','nothing')
(nie wierzę, że jest tam ustawienie, aby to osiągnąć, trzeba zapewnić sortowania wartości.)
Ten sposób sortowania ENUM może być bardzo przydatny w niektórych przypadkach! To naprawdę działa, próbowałem :) –
perfekcyjnie to, czego szukałem – Andrew
- 1. Enum C++ Get by Index
- 2. MySQL ORDER BY Pole daty, które nie ma formatu daty
- 3. Zaleta wydajności MySQL Enum?
- 4. MySQL GROUP BY i ORDER BY DESC
- 5. MySQL: ORDER BY FIELD/GROUP BY
- 6. GRUPA MySQL by Regex?
- 7. MySQL ORDER BY COUNT()?
- 8. Complex MySQL ORDER BY
- 9. MySQL ORDER BY IN()
- 10. Co by nazwał ten wzór enum?
- 11. Jak analizować DER bajtów?
- 12. MySQL Zmiana kolumny ENUM wartość
- 13. Tworzenie typu zmiennej ENUM w MySQL
- 14. MySQL ORDER BY określonej wartości
- 15. MySQL GROUP BY "i filtr"
- 16. ORDER BY i = (równe) w MYSQL
- 17. Jak zdefiniować zamówienie ORDER BY w mySQL
- 18. SELECT DISTINCT i ORDER BY w MySQL
- 19. Jak waga "ORDER BY" w mysql?
- 20. Jak wybrać najdłuższe pole tekstowe podczas korzystania z GROUP BY w mysql, a la MAX()?
- 21. Jak odszyfrować łańcuch kodowany DER w Javie?
- 22. AKTUALIZACJA z ORDER BY i LIMIT nie działa w MYSQL
- 23. MySQL - Przeszukaj pole ignorując spacje
- 24. Mysql: Zaktualizuj pole najnowszego rekordu
- 25. Jak sprawić, by pole varchar2 było krótsze w Oracle?
- 26. Czy warto zaindeksować pole datetime w mysql?
- 27. Tylko aktualizacja Czas w mysql Pole DateTime
- 28. Unikalne pole tekstowe w MySQL i php
- 29. jak stworzyć pole obliczeniowe w mysql?
- 30. Wybieranie MySQL na podstawie wartości ENUM
Ten będzie pracować w SQLite też. – nuqqsa