Há também a função MySQLFIELD
.
Se você deseja uma classificação completa para todos os valores possíveis:
SELECT id, name, priority
FROM mytable
ORDER BY FIELD(name, "core", "board", "other")
Se você só se importa que o "núcleo" esteja em primeiro lugar e os outros valores não importem:
SELECT id, name, priority
FROM mytable
ORDER BY FIELD(name, "core") DESC
Se você deseja classificar por "núcleo" primeiro e os outros campos na ordem de classificação normal:
SELECT id, name, priority
FROM mytable
ORDER BY FIELD(name, "core") DESC, priority
Existem algumas ressalvas aqui, no entanto:
Em primeiro lugar, tenho quase certeza de que essa é uma funcionalidade somente do mysql - a questão é chamada de mysql, mas nunca se sabe.
Em segundo lugar, preste atenção em como FIELD()
funciona: ele retorna o índice baseado em um do valor - no caso de FIELD(priority, "core")
, ele retornará 1 se "núcleo" for o valor. Se o valor do campo não estiver na lista, ele retorna zero . É por isso que DESC
é necessário, a menos que você especifique todos os valores possíveis.
Geralmente você pode fazer
select * from your_table order by case when name = 'core' then 1 else 2 end, priority
Especialmente no MySQL, você também pode fazer
select * from your_table order by name <> 'core', priority
Já que o resultado de uma comparação no MySQL é
0
ou1
e você pode classificar por esse resultado.fonte
1
e2
significa aqui?1
e2
são apenas 2 números que uso para classificar os dados. Pode ser3
e4
ou outra coisa.%
naWHERE
cláusula? Gostou. . . WHERE name LIKE '%sth%' . . .
? stackoverflow.com/questions/41303379/…Uma maneira de dar preferência a linhas específicas é adicionar um grande número à sua prioridade. Você pode fazer isso com uma
CASE
declaração: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
fonte
Isso funciona para mim usando Postgres 9+:
SELECT * FROM your_table ORDER BY name = 'core' DESC, priority DESC
fonte
Uma maneira é esta:
select id, name, priority from table a order by case when name='core' then -1 else priority end asc, priority asc
fonte
core
linhas?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')
fonte
faça isso:
SELECT * FROM table ORDER BY column `name`+0 ASC
Adicionar +0 significa que:
torna-se :
fonte
priority
, não posso dizer se deve fazer parte da solução completa.)Usa isto:
SELECT * FROM tablename ORDER BY priority desc, FIELD(name, "core")
fonte