Maison  >  Article  >  base de données  >  Explication détaillée de la méthode de conversion des colonnes MySQL en lignes et de fusion de champs (image et texte)

Explication détaillée de la méthode de conversion des colonnes MySQL en lignes et de fusion de champs (image et texte)

黄舟
黄舟original
2017-03-25 13:26:221275parcourir

L'éditeur ci-dessous vous proposera un article sur les méthodes mysql de conversion de colonnes en lignes et de fusion de champs (à lire absolument). L'éditeur pense que c'est plutôt bien, alors je vais le partager avec vous maintenant et le donner comme référence. Suivons l'éditeur pour y jeter un œil.

Tableau de données :

Explication détaillée de la méthode de conversion des colonnes MySQL en lignes et de fusion de champs (image et texte)

Changement de colonne : utiliser max. (cas quand alors)

max---agrégationfonction prendre la valeur maximale

(cas bien sûr quand ' Chinois' puis marque autre 0 fin) ---Jugement

comme langue---alias comme nom de colonne

SELECT
 `name`,
 MAX(
  CASE 
  WHEN course='语文' THEN
   score
  END
 ) AS 语文,
 MAX(
  CASE 
  WHEN course='数学' THEN
   score
  END
 ) AS 数学, 
 MAX(
  CASE 
  WHEN course='英语' THEN
   score
  END
 ) AS 英语
FROM
 student
GROUP BY `name`
;

Explication détaillée de la méthode de conversion des colonnes MySQL en lignes et de fusion de champs (image et texte)

champ de fusion affichage : En utilisant group_cancat(course,":","score")

SELECT
 `name`,
 GROUP_CONCAT(course, ":", score) AS 成绩
FROM
 student
GROUP BY
 `name`;

Explication détaillée de la méthode de conversion des colonnes MySQL en lignes et de fusion de champs (image et texte)

group_concat(), le manuel explique : Cette fonction renvoie une connexion avec un groupe. Résultat String pour une valeur non NULL.
Relativement abstrait et difficile à comprendre.

Pour le comprendre de manière simple, c'est en fait comme ceci : group_concat() calculera quelles lignes appartiennent au même groupe et affichera les colonnes appartenant au même groupe. Les colonnes à renvoyer sont déterminées par le paramètre de fonction

(c'est-à-dire le nom du champ). Il doit exister une norme de regroupement, qui consiste à regrouper en fonction de la colonne spécifiée par group by.

La fonction group_concat doit exécuter l'instruction group by en interne. C'est mon hypothèse.

1. Instruction de test :

SELECT
 GROUP_CONCAT(`name`)
FROM
 student
GROUP BY
 `name`;

Le résultat est de trouver quelles valeurs dans le nom sont les mêmes. égaux, tous Énumérez-les, séparés par des virgules, comme suit :

group_concat('name')

Explication détaillée de la méthode de conversion des colonnes MySQL en lignes et de fusion de champs (image et texte)

2. Test :

SELECT
 GROUP_CONCAT(`name`)
FROM
 student
;

Résultat :

group_concat('name')

Explication détaillée de la méthode de conversion des colonnes MySQL en lignes et de fusion de champs (image et texte)

Ce qui précède peut-il prouver que group_concat ne peut avoir un effet que lorsqu'il est utilisé avec l'instruction group by ? Le test réel est effectué ci-dessous

3. TestConstant affecte la configuration de group_concat() :

SET @@GROUP_CONCAT_MAX_LEN=4
Le manuel mentionne que la syntaxe de réglage est la suivante :


SET [SESSION | GLOBAL] group_concat_max_len = val;

Quelle est la différence entre les deux ?

SET @@global.GROUP_CONCAT_MAX_LEN=4;
global可以省略,那么就变成了:SET @@GROUP_CONCAT_MAX_LEN=4;

4. Utilisez la déclaration

SELECT
GROUP_CONCAT(`name`)
FROM
student;

pour obtenir :

group_concat('name')

Explication détaillée de la méthode de conversion des colonnes MySQL en lignes et de fusion de champs (image et texte)

Conclusion : La fonction group_concat() doit être utilisée avec la regroupez par instruction, pour obtenir l’effet souhaité.

La raison peut être comprise comme suit : group_concat() récupère tous les membres appartenant au groupe x (les paramètres de colonne dans la fonction précisent quels champs doivent être affichés). D'où vient le groupe X ?

S'il n'y a pas de groupe spécifié, alors il n'y a aucun moyen de savoir selon quel groupe group_concat() affichera les membres. Par conséquent, lorsqu'il n'y a pas de clause groupe par comme ci-dessus, Liu Bei, Guan Yu, Zhang Fei, Liu Bei, Guan Yu, Zhang Fei, Liu Bei, Guan Yu, Zhang Fei sont affichés.


Quand cette fonction est-elle réellement nécessaire ?

Si vous devez

interroger , le résultat est le suivant : le nom du groupe est affiché à gauche et toutes les informations sur les membres sous le groupe sont affiché à droite. Grâce à cette fonction, vous pouvez enregistrer beaucoup de choses.

Aussi, si je l'utilise comme ça :

SELECT
 `name`,
 GROUP_CONCAT(course, ":", score) AS 成绩
FROM
 student
;
Ça n'a pas beaucoup de sens.


group_concat() spécifiant une colonne est le meilleur des cas. Si plusieurs colonnes sont spécifiées.

SELECT
 `name`,
 GROUP_CONCAT(course, ":", score) AS 成绩
FROM
 student
GROUP BY
 `name`;
Ensuite, le résultat affiché est similaire à ceci :

group_concat(course,":",score)

Explication détaillée de la méthode de conversion des colonnes MySQL en lignes et de fusion de champs (image et texte)

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