Maison > base de données > tutoriel mysql > Compétences de changement de colonne MySQL et partage d'exemples

Compétences de changement de colonne MySQL et partage d'exemples

黄舟
Libérer: 2017-03-25 13:28:57
original
1477 Les gens l'ont consulté

L'éditeur ci-dessous vous proposera un article sur les techniques de changement de colonne mysql (partage). L'éditeur le trouve plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence pour tout le monde. Suivons l'éditeur pour y jeter un œil

Avant-propos :

Pour des raisons historiques ou de performances, de nombreuses tables métiers utilisent la violation Un paradigme modèle de conception. Autrement dit, plusieurs valeurs d'attribut sont stockées dans la même colonne (voir le tableau ci-dessous pour la structure spécifique).

Dans ce mode, les applications doivent souvent diviser la colonne en fonction des délimiteurs et obtenir le résultat de la conversion de la colonne.

Données du tableau :

ID Value
1 tiny,small,big
2 small,medium
3 tiny,big

Résultats attendus :

ID Valeur
1 minuscule
1 petit
1 grand
2 petit
2 moyen
3 minuscule
3 grand

Texte :

#需要处理的表
create table tbl_name (ID int ,mSize varchar(100));
insert into tbl_name values (1,'tiny,small,big');
insert into tbl_name values (2,'small,medium');
insert into tbl_name values (3,'tiny,big');

#用于循环的自增表
create table incre_table (AutoIncreID int);
insert into incre_table values (1);
insert into incre_table values (2);
insert into incre_table values (3);
Copier après la connexion
select a.ID,substring_index(substring_index(a.mSize,',',b.AutoIncreID),',',-1) 
from 
tbl_name a
join
incre_table b
on b.AutoIncreID <= (length(a.mSize) - length(replace(a.mSize,&#39;,&#39;,&#39;&#39;))+1)
order by a.ID;
Copier après la connexion

Analyse du principe :

Le principe le plus fondamental de cette jointure est le produit cartésien. C'est ainsi que la boucle est implémentée.

Ce qui suit est l'analyse spécifique du problème :

length(a.Size) - length(replace(a.mSize,',' ,' '))+1 signifie, après fractionnement par virgules, modifier le nombre de valeurs dans la colonne, ci-après dénommé n

Le pseudo code du processus de jointure :

Boucle basée sur l'ID

{
判断:i 是否 <= n
{
Copier après la connexion

Obtenir les données les plus proches de la i-ème virgule, c'est-à-dire substring_index(substring_index(a.mSize,',' ,b.ID),',',- 1)

i = i +1
}
ID = ID +1
}
Copier après la connexion

Résumé :

L'inconvénient de cette méthode est que nous besoin d'un tableau séparé avec des séries continues (ici incre_table). Et la valeur maximale de la séquence continue doit être supérieure au nombre de valeurs qui correspondent à la division.

Par exemple, s'il y a une ligne de mSize avec 100 valeurs séparées par des virgules, alors notre incre_table doit avoir au moins 100 lignes consécutives.

Bien sûr, il existe également des listes de numéros consécutifs prêtes à l'emploi disponibles dans MySQL. Par exemple, mysql.help_topic: help_topic_id a un total de 504 valeurs, qui peuvent généralement répondre à la plupart des besoins.

se réécrit ainsi :

select a.ID,substring_index(substring_index(a.mSize,&#39;,&#39;,b.help_topic_id+1),&#39;,&#39;,-1) 
from 
tbl_name a
join
mysql.help_topic b
on b.help_topic_id < (length(a.mSize) - length(replace(a.mSize,&#39;,&#39;,&#39;&#39;))+1)
order by a.ID;
Copier après la connexion

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