2017-08-19 4 views
0

Es gibt viele Beispiele hier, um das Gegenteil zu erreichen - Spalten zu Zeilen. Aber nicht das.MySql Textreihen zu Spalten (transponieren)

Die Zeilen haben URLs wie folgt aus:

Farbe:

color   URL 
color: black http://www.example.com/1/ 
color: black http://www.example.com/2/ 
color: black http://www.example.com/3/ 
color: black http://www.example.com/4/ 

Gibt es eine Möglichkeit zu erreichen: schwarz http://www.example.com/1/http://www.example.com/2/http://www.example.com/3/http://www.example.com/4/

ich sie in einzelne Zeilen für jede URL wie diese erhalten müssen das in MySql?

+1

Ihre Daten sind nicht eindeutig. Ist das eine verwirrte Zeichenfolge ohne Trennzeichen? Sind es mehrere Spalten? –

Antwort

0

Wenn diese in verschiedenen Spalten sind, können Sie tun:

select color, url1 as url from t 
union all 
select color, url2 from t 
union all 
select color, url3 from t 
union all 
select color, url4 from t; 

Die folgenden funktionieren könnte:

Wenn sie in einer verkorksten Spalte sind (wie das Beispiel vorgeschlagen), dann so etwas wie :

select color, 
     concat('http:', substring_index(substring_index(concat(url, 'http:'), 'http:', 2), 'http:', -1)) as url 
from t 
union all 
select color, 
     concat('http:', substring_index(substring_index(concat(url, 'http:'), 'http:', 3), 'http:', -1)) as url 
from t 
where url like 'http:%http:%' 
union all 
select color, 
     concat('http:', substring_index(substring_index(concat(url, 'http:'), 'http:', 4), 'http:', -1)) as url 
from t 
where url like 'http:%http:%http:%'; 

Sie würden eine Unterabfrage für jede URL hinzufügen, die Sie haben.

+0

Die URLs sind alle in einer Zeile in einem Feld, könnte eine unbegrenzte Anzahl sein. Zuerst muss ich jede einzelne URL aus diesem Feld herausholen und dann eine URL pro Zeile bekommen. – popkutt

Verwandte Themen