Heim > Datenbank > MySQL-Tutorial > Wie kann ich MySQLs GROUP_CONCAT umkehren: Einen verketteten String in einzelne Werte aufteilen?

Wie kann ich MySQLs GROUP_CONCAT umkehren: Einen verketteten String in einzelne Werte aufteilen?

Barbara Streisand
Freigeben: 2024-12-16 22:05:14
Original
531 Leute haben es durchsucht

How to Reverse MySQL's GROUP_CONCAT: Splitting a Concatenated String into Individual Values?

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 |
+----+----------------------+
Nach dem Login kopieren

Ihr Ziel ist es, diese Daten in eine detailliertere Form umzuwandeln Format:

+----+------------+
| id | colors     |
+----+------------+
| 1  | Red        |
| 1  | Green      |
| 1  | Blue       |
| 2  | Orangered  |
| 2  | Periwinkle |
+----+------------+
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage