Istnieje również MySQL FIELD
funkcja
.
Jeśli chcesz dokonać pełnego sortowania dla wszystkich możliwych wartości:
SELECT id, name, priority
FROM mytable
ORDER BY FIELD(name, "core", "board", "other")
Jeśli zależy Ci tylko na tym, że „rdzeń” jest na pierwszym miejscu, a inne wartości nie mają znaczenia:
SELECT id, name, priority
FROM mytable
ORDER BY FIELD(name, "core") DESC
Jeśli chcesz najpierw posortować według „rdzenia”, a pozostałe pola w normalnej kolejności sortowania:
SELECT id, name, priority
FROM mytable
ORDER BY FIELD(name, "core") DESC, priority
Jest tu jednak kilka zastrzeżeń:
Po pierwsze, jestem prawie pewien, że jest to tylko funkcjonalność mysql — pytanie jest oznaczone jako mysql, ale nigdy nie wiadomo.
Po drugie, zwróć uwagę, jak FIELD()
działa:zwraca indeks oparty na jedynce wartości - w przypadku FIELD(priority, "core")
, zwróci 1, jeśli "core" jest wartością. Jeśli wartości pola nie ma na liście, zwraca zero . Dlatego DESC
jest konieczne, chyba że określisz wszystkie możliwe wartości.