Maison > Article > base de données > Explication détaillée des règles de tri multi-champs Order By dans MySQL
Vous voulez savoir quelles règles mysql order by sont utilisées pour le tri ? Cet article présente principalement l'exemple de code de la règle de tri multi-champs Order By dans MySQL. L'éditeur pense que c'est assez bon, je vais le partager avec vous ici. Les amis qui en ont besoin pourront s'y référer.
Ordre MySql par champ unique
Créez une table de test comme suit :
CREATE TABLE `a` ( `code` varchar(255) DEFAULT NULL, `name` varchar(255) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT into a values('中一', '我'); INSERT into a values('中二', '你'); INSERT into a values('高一', '我是'); INSERT into a values('高二', '我们'); INSERT into a values('高二', '我的');
Le relevé du test est le suivant :
-- hex(): 获取16进制字节码 select name, hex(name) from a order by name desc
Le résultat est le suivant :
name | hex(name) |
我的 | E68891E79A84 |
我是 | E68891E698AF |
我们 | E68891E4BBAC |
我 | E68891 |
你 | E4BDA0 |
Évidemment, le tri dans MySQL est basé sur le bytecode Lorsque le premier mot est le même, comparez le bytecode du deuxième mot, et ainsi de suite
Ordre MySQL par multi-champs
Ce n'est que lorsque vous avez des comparaisons que vous pouvez avoir des idées, et ce n'est que lorsque vous avez des comparaisons que vous pouvez progresser, nous listons donc d'abord le champ unique le tri des résultats par ordre décroissant, puis en regardant l'ordre décroissant des mines de gaz dans les deux champs, nous pouvons en analyser la raison.
-- 按照name进行降序排序 select * from a order by name desc; -- 按照code进行降序排序 select * from a order by code desc;
Le côté gauche est commandé par nom desc, et le côté droit est le résultat de l'ordre par code desc
code | name |
高二 | 我的 |
高一 | 我是 |
高二 | 我们 |
中一 | 我 |
中二 | 你 |
code | name |
高二 | 我们 |
高二 | 我的 |
高一 | 我是 |
中二 | 你 |
中一 | 我 |
Le résultat est très bon Évidemment : lorsqu'un seul champ est trié, l'ordre dans lequel les autres champs apparaissent est naturellement trié.
Regardons le tri multi-champs
-- 按照code, name进行降序排序 select * from a order by code, name desc;
code | name |
中一 | 我 |
中二 | 你 |
高一 | 我是 |
高二 | 我的 |
高二 | 我们 |
Les résultats sont les suivants : Tout d'abord, merci vous qq_27837327 et MjayTang, je suis ici Voici un test L'article original disait que le tri SQL n'est pas valide. En fait, commander par code, nom desc équivaut à commander par code asc, nom desc
Après des tests, il a été constaté que l'effet de tri de select * à partir d'une commande par code et nom desc est toujours invalide.
Nous examinons la déclaration suivante
-- 按照code, name进行降序排序 select * from a order by code desc, name desc; -- 该语句的效果等同于下面的语句, 其中1、2分别对应的是code、name select code, name from a order by 1 desc, 2 desc;
code | name |
高二 | 我的 |
高二 | 我们 |
高一 | 我是 |
中二 | 你 |
中一 | 我 |
En comparant les champs uniques de code et de nom par ordre décroissant, nous peut find , lors de l'utilisation de l'ordre par code desc, nom desc, MySQL triera d'abord par code par ordre décroissant, puis utilisera name pour trier par ordre décroissant en fonction du code.
De plus, nous pouvons également utiliser la fonction contat pour regrouper plusieurs champs et les trier. Mais assurez-vous que le champ ne peut pas être nul. Jetons un coup d'œil à l'instruction SQL et aux résultats de concat.
select * from a order by concat(code,name) desc
code | name |
高二 | 我的 |
高二 | 我们 |
高一 | 我是 |
中二 | 你 |
中一 | 我 |
Évidemment, à partir de cet exemple de test, l'effet de l'ordre par concat(code, nom) desc est équivalent à l'ordre par code desc, nom desc
Recommandations associées :
Explication détaillée du code d'optimisation de l'ordre par instruction MySQL
Ordre des caractères par in dans MySQL (recommandé)
Commande MySQL par partage d'utilisation
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!