Istnieje również MySQL FIELD
function.
Jeśli chcesz pełną sortowania dla wszystkich możliwych wartości:
SELECT id, name, priority
FROM mytable
ORDER BY FIELD(priority, "core", "board", "other")
Jeśli tylko obchodzi, że „rdzeń” jest pierwszym i inne wartości nie mają znaczenia:
SELECT id, name, priority
FROM mytable
ORDER BY FIELD(priority, "core") DESC
Jeśli chcesz aby sortować według "rdzenia" najpierw, a inne pola w normalnej kolejności sortowania:
SELECT id, name, priority
FROM mytable
ORDER BY FIELD(priority, "core") DESC, priority
Jest kilka zastrzeżeń tutaj jednak:
Po pierwsze, jestem pewien, że jest to funkcjonalność tylko dla MySQL - pytanie jest oznaczone mysql, ale nigdy nie wiadomo.
Po drugie, należy zwrócić uwagę na to, jak FIELD()
prac: zwraca indeks wartości z jeden własnych - w przypadku FIELD(priority, "core")
, będzie to zwraca 1 jeśli „core” jest wartością. Jeśli wartość pola nie znajduje się na liście, zwraca zero. Dlatego konieczne jest podanie DESC
, chyba że podasz wszystkie możliwe wartości.
Po około 5 lat zmieniłem zaakceptowaną odpowiedź na tę, ponieważ jest czystsza i szybsza. – Omid
ekwiwalent db2? – Cybermonk