Commande par" enum field " en MYSQL
il y a un champ 'noticeBy' enum('email','mobile','all','auto','nothing') pas nul par défaut 'auto'. Comme il a connu l'ordre par le champ D'ENUM exécute par rapport à son index. Cependant, comment rendre possible l'ordre par ses valeurs?
3 réponses
tel que documenté sous Tri:
ENUM
les valeurs sont triées en fonction de leur numéro d'index, qui dépend de l'ordre dans lequel les membres de l'énumération ont été énumérés dans la spécification de la colonne. Par exemple,'b'
trie avant'a'
ENUM('b', 'a')
. La chaîne vide trie avant les chaînes non vides, etNULL
valeurs de tri avant toutes les autres valeurs d'énumération.Pour éviter des résultats inattendus lors de l'utilisation de l'
ORDER BY
l'article sur unENUM
colonne, utilisez une de ces techniques:
spécifier le
ENUM
liste Par Ordre alphabétique.assurez-vous que la colonne est triée lexiquement plutôt que par numéro d'index par codage
ORDER BY CAST(col AS CHAR)
ouORDER BY CONCAT(col)
.
par la deuxième puce, vous pouvez donc trier sur la colonne après qu'elle ait été cast pour une chaîne de caractères:
ORDER BY CAST(noticeBy AS CHAR)
Cela fonctionne aussi:
ORDER BY FIELD(noticeBy, 'all','auto','email','mobile','nothing')
(je ne crois pas qu'il y a un paramètre pour y parvenir, vous devez fournir le genre de valeurs.)
Vous pouvez définir votre ordre comme vous le souhaitez:
ORDER BY CASE noticeBy
WHEN 'email' THEN 1
WHEN 'mobile' THEN 2
WHEN 'all' THEN 3
WHEN 'auto' THEN 4
ELSE 5
END
pour revenir à l'rangées dans l'ordre suivant: e-mail, mobile, auto, rien.