Das Rätsel um die Umkehrung von GROUP_CONCAT in MySQL lösen
Im Bereich der Datenmanipulation ist die Funktion GROUP_CONCAT führend bei der Verkettung mehrerer Werte zu einem einzelne Saite. Allerdings stellt die umgekehrte Operation, das Aufteilen einer verketteten Zeichenfolge in einzelne Werte, eine Herausforderung dar.
Das vorliegende Problem
Stellen Sie sich ein Szenario vor, in dem Sie eine Tabelle „Farben“ haben " mit Daten wie folgt strukturiert:
+----+----------------------+ | id | colors | +----+----------------------+ | 1 | Red,Green,Blue | | 2 | Orangered,Periwinkle | +----+----------------------+
Ihr Ziel ist es, diese Daten in eine detailliertere Form umzuwandeln Format:
+----+------------+ | id | colors | +----+------------+ | 1 | Red | | 1 | Green | | 1 | Blue | | 2 | Orangered | | 2 | Periwinkle | +----+------------+
Die Lösung: Eintauchen in die Tiefen von SQL
Um diese Datenmetamorphose zu erreichen, können Sie die Leistungsfähigkeit der SUBSTRING_INDEX-Funktion nutzen. Mit dieser vielseitigen Funktion können Sie bestimmte Teilzeichenfolgen basierend auf Trennzeichen extrahieren.
SELECT id, SUBSTRING_INDEX(SUBSTRING_INDEX(colors, ',', n.digit+1), ',', -1) color FROM colors INNER JOIN (SELECT 0 digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3) n ON LENGTH(REPLACE(colors, ',' , '')) <= LENGTH(colors)-n.digit ORDER BY id, n.digit
Enthüllung der Mechanismen hinter der Abfrage
Die äußere Abfrage wählt die Spalte „id“ aus und Verwendet die Funktion SUBSTRING_INDEX zweimal verschachtelt, um die gewünschten Teilzeichenfolgen zu isolieren. Der erste Aufruf von SUBSTRING_INDEX extrahiert die Teilzeichenfolge bis zum (n.digit 1)-ten Komma, während der zweite Aufruf dann die Teilzeichenfolge nach der (n.digit 1)-ten Komma bis zum Ende der Zeichenfolge extrahiert.
Der INNER JOIN mit der Unterabfrage stellt sicher, dass die SUBSTRING_INDEX-Funktion für maximal 4 Teilzeichenfolgen angewendet wird, wie durch die „Ziffer“ definiert. Spalte in der Unterabfrage. Um mehr Teilzeichenfolgen zu unterstützen, passen Sie die Unterabfrage entsprechend an.
Schließlich sortiert die ORDER BY-Klausel die Ergebnisse nach „id“ und dann nach der numerischen Reihenfolge der Teilzeichenfolgen für jede Zeile.
Demo und Credits
Für eine praktische Demonstration besuchen Sie die in der Referenz verlinkte Geige bereitgestellt.
Referenzen
[Mehrere Werte aus einer durch Kommas getrennten Liste extrahieren](https://www.data-generator.com/fiddle/d3c78f201137b4b56a63a95332b8106b)
Das obige ist der detaillierte Inhalt vonWie kann ich MySQLs GROUP_CONCAT umkehren: Einen verketteten String in einzelne Werte aufteilen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!