Jest też funkcja MySQLFIELD
.
Jeśli chcesz kompletne sortowanie 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, aby „rdzeń” był pierwszy, 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:
SELECT id, name, priority
FROM mytable
ORDER BY FIELD(name, "core") DESC, priority
Istnieją jednak pewne zastrzeżenia:
Po pierwsze, jestem prawie pewien, że to tylko funkcja mysql - pytanie jest otagowane jako mysql, ale nigdy nie wiadomo.
Po drugie, zwróć uwagę na to, jak FIELD()
działa: zwraca indeks wartości ( liczony od jedynek) - w przypadku FIELD(priority, "core")
zwraca 1, jeśli wartością jest „rdzeń”. Jeśli wartość pola nie znajduje się na liście, zwraca zero . Dlatego DESC
jest to konieczne, chyba że określisz wszystkie możliwe wartości.
Generalnie możesz to zrobić
select * from your_table order by case when name = 'core' then 1 else 2 end, priority
Szczególnie w MySQL możesz to zrobić
select * from your_table order by name <> 'core', priority
Ponieważ wynik porównania w MySQL to albo
0
albo1
i możesz sortować według tego wyniku.źródło
1
i co2
oznacza?1
i2
to tylko 2 liczby, których używam do sortowania danych. Może3
i4
coś innego.%
wWHERE
klauzuli jest? Lubisz. . . WHERE name LIKE '%sth%' . . .
? stackoverflow.com/questions/41303379/ ...Jednym ze sposobów nadania pierwszeństwa określonym wierszom jest dodanie dużej liczby do ich priorytetu. Możesz to zrobić za pomocą
CASE
oświadczenia:select id, name, priority from mytable order by priority + CASE WHEN name='core' THEN 1000 ELSE 0 END desc
Demo: http://www.sqlfiddle.com/#!2/753ee/1
źródło
To działa dla mnie przy użyciu Postgres 9+:
SELECT * FROM your_table ORDER BY name = 'core' DESC, priority DESC
źródło
Oto jeden sposób:
select id, name, priority from table a order by case when name='core' then -1 else priority end asc, priority asc
źródło
core
rzędów?SELECT * FROM cars_new WHERE status = '1' and car_hide !='1' and cname IN ('Executive Car','Saloon','MPV+','MPV5') ORDER BY FIELD(cname, 'Executive Car', 'Saloon','MPV+','mpv5')
źródło
Zrób to:
SELECT * FROM table ORDER BY column `name`+0 ASC
Dołączenie +0 oznacza, że:
staje się :
źródło
priority
, nie mogę powiedzieć, czy powinien on być częścią kompletnego rozwiązania.)Użyj tego:
SELECT * FROM tablename ORDER BY priority desc, FIELD(name, "core")
źródło