Maison  >  Article  >  base de données  >  Explication sur la méthode de conversion des lignes et des colonnes des données d'une table mysql

Explication sur la méthode de conversion des lignes et des colonnes des données d'une table mysql

jacklove
jackloveoriginal
2018-06-08 16:36:081884parcourir

Pendant le processus de développement, pour des raisons historiques ou de performances, il est nécessaire de convertir les données de colonne du tableau en données de ligne, ou de convertir les données de ligne en données de colonne à utiliser. des lignes et des lignes de données de table MySQL, et fournir des exemples de démonstration complets et des compétences SQL.

1. Convertir des lignes en colonnes

Créer un tableau et des données de données de test

CREATE TABLE `option` ( `category_id` int(10) unsigned NOT NULL COMMENT '分类id', `name` varchar(20) NOT NULL COMMENT '名称', KEY `category_id` (`category_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `option` (`category_id`, `name`) VALUES
(1, '大'),
(1, '中'),
(1, '小'),
(2, '奔驰'),
(2, '宝马'),
(3, '2015'),
(3, '2016'),
(3, '2017'),
(3, '2018'),
(4, '1m'),
(4, '2m');mysql> select * from `option`;
+-------------+--------+| category_id | name   |
+-------------+--------+|           1 | 大     |
|           1 | 中     |
|           1 | 小     |
|           2 | 奔驰   |
|           2 | 宝马   |
|           3 | 2015   |
|           3 | 2016   |
|           3 | 2017   |
|           3 | 2018   |
|           4 | 1m     ||           4 | 2m     |
+-------------+--------+

Après avoir converti des lignes en colonnes , attendez-vous à ce que le résultat suivant soit obtenu :

+-------------+---------------------+| category_id | name                |
+-------------+---------------------+|           1 | 大,中,小            |
|           2 | 奔驰,宝马           |
|           3 | 2015,2016,2017,2018 ||           4 | 1m,2m               |
+-------------+---------------------+

conversion de ligne en colonne, qui peut être obtenue en utilisant la fonction group_concat() combinée avec group by.

La fonction group_concat() peut obtenir la valeur de connexion de la combinaison d'expressions. Le séparateur par défaut est la virgule, qui peut être définie sur d'autres séparateurs via separator.

Remarque : La fonction group_concat() a une limite de longueur sur le résultat renvoyé. La valeur par défaut est de 1024 octets, mais c'est suffisant pour les situations normales.

Pour l'utilisation de la fonction group_concat(), merci de vous référer à mon article précédent : "Instructions pour l'utilisation des fonctions mysql concat et group_concat"

Résultats de l'exécution :

mysql> select category_id,group_concat(name) as name from `option` group by category_id order by category_id;
+-------------+---------------------+| category_id | name                |
+-------------+---------------------+|           1 | 大,中,小            |
|           2 | 奔驰,宝马           |
|           3 | 2015,2016,2017,2018 ||           4 | 1m,2m               |
+-------------+---------------------+

2. Transfert de colonnes

Créer un tableau de données de test et des données

CREATE TABLE `option2` ( `category_id` int(10) unsigned NOT NULL COMMENT '分类id', `name` varchar(100) NOT NULL COMMENT '名称集合') ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `option2` (`category_id`, `name`) VALUES
(1, '大,中,小 '),
(2, '奔驰,宝马'),
(3, '2015,2016,2017,2018'),
(4, '1m,2m');mysql> select * from `option2`;
+-------------+---------------------+| category_id | name                |
+-------------+---------------------+|           1 | 大,中,小            |
|           2 | 奔驰,宝马           |
|           3 | 2015,2016,2017,2018 ||           4 | 1m,2m               |
+-------------+---------------------+

Après avoir converti les colonnes en lignes, attendez-vous aux résultats suivants

+-------------+--------+| category_id | name   |
+-------------+--------+|           1 | 大     |
|           1 | 中     |
|           1 | 小     |
|           2 | 奔驰   |
|           2 | 宝马   |
|           3 | 2015   |
|           3 | 2016   |
|           3 | 2017   |
|           3 | 2018   |
|           4 | 1m     ||           4 | 2m     |
+-------------+--------+

La conversion de colonnes en lignes est plus compliquée que la conversion de lignes en colonnes pour les données dont le contenu des colonnes est séparé par des délimiteurs, nous pouvons utiliser substring_index() La fonction divise la sortie et combine le produit cartésien pour implémenter la boucle.

select a.category_id,substring_index(substring_index(a.name,&#39;,&#39;,b.category_id),&#39;,&#39;,-1) as name from `option2` as ajoin `option2` as b on b.category_id<=(length(a.name) - length(replace(a.name,&#39;,&#39;,&#39;&#39;))+1)order by a.category_id,b.category_id;

Résultat de l'exécution :

mysql> select a.category_id,substring_index(substring_index(a.name,&#39;,&#39;,b.category_id),&#39;,&#39;,-1) as name from `option2` as a    -> join `option2` as b on b.category_id<=(length(a.name) - length(replace(a.name,&#39;,&#39;,&#39;&#39;))+1)    -> order by a.category_id,b.category_id;
+-------------+--------+| category_id | name   |
+-------------+--------+|           1 | 大     |
|           1 | 中     |
|           1 | 小     |
|           2 | 奔驰   |
|           2 | 宝马   |
|           3 | 2015   |
|           3 | 2016   |
|           3 | 2017   |
|           3 | 2018   |
|           4 | 1m     ||           4 | 2m     |
+-------------+--------+

Cet article explique la méthode de conversion des lignes et des colonnes des données de la table mysql Veuillez payer. attention au contenu plus connexe Pan Heping site Web chinois.

Recommandations associées :

Comment combiner plusieurs tableaux unidimensionnels en un tableau bidimensionnel via PHP

Expliquez le retour PHP méthodes pour spécifier plusieurs colonnes dans un tableau

Explication détaillée de la classe de compteur Redis basée sur PHP

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