Heim  >  Artikel  >  Datenbank  >  Fähigkeiten zum Wechseln von MySQL-Spalten und Teilen von Beispielen

Fähigkeiten zum Wechseln von MySQL-Spalten und Teilen von Beispielen

黄舟
黄舟Original
2017-03-25 13:28:571456Durchsuche

Der folgende Herausgeber bringt Ihnen einen Artikel über MySQL Fähigkeiten zum Spaltenwechsel (teilen). Der Herausgeber findet es ziemlich gut, deshalb werde ich es jetzt mit Ihnen teilen und es allen als Referenz geben. Folgen wir dem Herausgeber und werfen wir einen Blick darauf.

Vorwort:

Aus historischen Gründen oder aus Leistungsgründen verwenden viele Geschäftstabellen den Verstoß A ParadigmaEntwurfsmuster. Das heißt, mehrere Werte des -Attributs werden in derselben Spalte gespeichert (die spezifische Struktur finden Sie in der Tabelle unten).

In diesem Modus müssen Anwendungen häufig die Spalte anhand von Trennzeichen aufteilen und das Ergebnis der Spaltenkonvertierung erhalten.

Tabellendaten:

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

Erwartete Ergebnisse:

ID Wert
1 winzig
1 klein
1 groß
2 klein
2 mittel
3 winzig
3 groß

Text:

#需要处理的表
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);
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;

Prinzipanalyse:

Das grundlegendste Prinzip dieser Verbindung ist das kartesische Produkt. So wird die Schleife implementiert.

Das Folgende ist die spezifische Problemanalyse:

length(a.Size) - length(replace(a.mSize,',' ,''))+1 bedeutet, dass nach der Aufteilung durch Kommas die Anzahl der Werte in der Spalte geändert wird, im Folgenden als n bezeichnet

Der Pseudocode des Join-Prozesses:

Schleife basierend auf der ID

{
判断:i 是否 <= n
{

Erhalten Sie die Daten, die dem i-ten Komma am nächsten kommen, d. h. substring_index(substring_index(a.mSize,',' ,b.ID),',',- 1)

i = i +1
}
ID = ID +1
}

Zusammenfassung:

Der Nachteil dieser Methode ist, dass wir benötige eine separate Tabelle mit fortlaufenden Reihen (hier incre_table). Und der Maximalwert der kontinuierlichen Folge muss größer sein als die Anzahl der Werte, die der Division entsprechen.

Wenn es beispielsweise eine Zeile von mSize mit 100 durch Kommas getrennten Werten gibt, muss unsere incre_table mindestens 100 aufeinanderfolgende Zeilen haben.

Natürlich gibt es in MySQL auch vorgefertigte fortlaufende Nummernlisten. Beispielsweise verfügt mysql.help_topic: help_topic_id über insgesamt 504 Werte, was im Allgemeinen die meisten Anforderungen erfüllen kann.

wird wie folgt umgeschrieben:

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;

Das obige ist der detaillierte Inhalt vonFähigkeiten zum Wechseln von MySQL-Spalten und Teilen von Beispielen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn