Maison > base de données > tutoriel mysql > le corps du texte

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

jacklove
Libérer: 2018-06-08 16:36:08
original
1968 Les gens l'ont consulté

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     |
+-------------+--------+
Copier après la connexion

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               |
+-------------+---------------------+
Copier après la connexion

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               |
+-------------+---------------------+
Copier après la connexion

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               |
+-------------+---------------------+
Copier après la connexion

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     |
+-------------+--------+
Copier après la connexion

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;
Copier après la connexion

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     |
+-------------+--------+
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal