Maison  >  Article  >  base de données  >  Explication détaillée des règles de tri multi-champs Order By dans MySQL

Explication détaillée des règles de tri multi-champs Order By dans MySQL

小云云
小云云original
2017-12-14 11:54:254269parcourir

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn