Tengo una tabla con 3 columnas:
id | name | priority
--------------------
1 | core | 10
2 | core | 9
3 | other | 8
4 | board | 7
5 | board | 6
6 | core | 4
Quiero ordenar el conjunto de resultados usando priority
pero primero aquellas filas que tienen name=core
incluso si tienen menor prioridad. El resultado debería verse así
id | name | priority
--------------------
6 | core | 4
2 | core | 9
1 | core | 10
5 | board | 6
4 | board | 7
3 | other | 8
fuente
Generalmente puedes hacer
select * from your_table order by case when name = 'core' then 1 else 2 end, priority
Especialmente en MySQL también puedes hacer
select * from your_table order by name <> 'core', priority
Dado que el resultado de una comparación en MySQL es
0
o1
y puede ordenar por ese resultado.fuente
1
y qué2
significa aquí?1
y2
son solo 2 números que uso para ordenar los datos. Podría ser3
y4
u otra cosa.%
en laWHERE
cláusula? Al igual que. . . WHERE name LIKE '%sth%' . . .
? stackoverflow.com/questions/41303379/...Una forma de dar preferencia a filas específicas es agregar un gran número a su prioridad. Puede hacer esto con una
CASE
declaración:select id, name, priority from mytable order by priority + CASE WHEN name='core' THEN 1000 ELSE 0 END desc
Demostración: http://www.sqlfiddle.com/#!2/753ee/1
fuente
Esto me funciona usando Postgres 9+:
SELECT * FROM your_table ORDER BY name = 'core' DESC, priority DESC
fuente
Una forma es esta:
select id, name, priority from table a order by case when name='core' then -1 else priority end asc, priority asc
fuente
core
filas?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')
fuente
hacer esto:
SELECT * FROM table ORDER BY column `name`+0 ASC
Agregar el +0 significará que:
se convierte en:
fuente
priority
, no puedo decir si debería ser parte de la solución completa).Utilizar esta:
SELECT * FROM tablename ORDER BY priority desc, FIELD(name, "core")
fuente