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,',',''))+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,',',b.help_topic_id+1),',',-1) from tbl_name a join mysql.help_topic b on b.help_topic_id < (length(a.mSize) - length(replace(a.mSize,',',''))+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!