Il y a aussi la fonction MySQLFIELD
.
Si vous souhaitez un tri complet pour toutes les valeurs possibles:
SELECT id, name, priority
FROM mytable
ORDER BY FIELD(name, "core", "board", "other")
Si vous vous souciez seulement que le "noyau" soit le premier et que les autres valeurs n'ont pas d'importance:
SELECT id, name, priority
FROM mytable
ORDER BY FIELD(name, "core") DESC
Si vous voulez trier d'abord par "noyau", et les autres champs dans l'ordre de tri normal:
SELECT id, name, priority
FROM mytable
ORDER BY FIELD(name, "core") DESC, priority
Il y a cependant quelques mises en garde:
Tout d'abord, je suis à peu près sûr qu'il s'agit d'une fonctionnalité uniquement mysql - la question est étiquetée mysql, mais on ne sait jamais.
Deuxièmement, faites attention à la façon dont FIELD()
fonctionne: il renvoie l' index basé sur un de la valeur - dans le cas de FIELD(priority, "core")
, il retournera 1 si "core" est la valeur. Si la valeur du champ n'est pas dans la liste, elle renvoie zéro . C'est pourquoi DESC
est nécessaire, sauf si vous spécifiez toutes les valeurs possibles.
Généralement, vous pouvez faire
select * from your_table order by case when name = 'core' then 1 else 2 end, priority
Surtout dans MySQL, vous pouvez également faire
select * from your_table order by name <> 'core', priority
Puisque le résultat d'une comparaison dans MySQL est soit
0
ou1
et vous pouvez trier par ce résultat.la source
1
et que2
signifie ici?1
et ne2
sont que 2 nombres que j'utilise pour trier les données. Cela pourrait être3
et4
ou autre chose.%
dans l'WHERE
article? Comme. . . WHERE name LIKE '%sth%' . . .
? stackoverflow.com/questions/41303379/…Une façon de donner la préférence à des lignes spécifiques consiste à ajouter un grand nombre à leur priorité. Vous pouvez le faire avec une
CASE
déclaration:select id, name, priority from mytable order by priority + CASE WHEN name='core' THEN 1000 ELSE 0 END desc
Démo: http://www.sqlfiddle.com/#!2/753ee/1
la source
Cela fonctionne pour moi avec Postgres 9+:
SELECT * FROM your_table ORDER BY name = 'core' DESC, priority DESC
la source
Une façon est la suivante:
select id, name, priority from table a order by case when name='core' then -1 else priority end asc, priority asc
la source
core
lignes?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')
la source
faites ceci:
SELECT * FROM table ORDER BY column `name`+0 ASC
Ajouter le +0 signifie que:
devient :
la source
priority
, je ne peux pas dire si cela devrait faire partie de la solution complète.)Utilisez ceci:
SELECT * FROM tablename ORDER BY priority desc, FIELD(name, "core")
la source