Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Membalikkan GROUP_CONCAT MySQL: Memisahkan Rentetan Bercantum kepada Nilai Individu?

Bagaimana untuk Membalikkan GROUP_CONCAT MySQL: Memisahkan Rentetan Bercantum kepada Nilai Individu?

Barbara Streisand
Lepaskan: 2024-12-16 22:05:14
asal
619 orang telah melayarinya

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

Merungkai Enigma Songsang GROUP_CONCAT dalam MySQL

Dalam bidang manipulasi data, fungsi GROUP_CONCAT berkuasa besar dalam menggabungkan berbilang nilai menjadi a rentetan tunggal. Walau bagaimanapun, operasi songsang, membelah rentetan bercantum kepada nilai individu, menimbulkan cabaran.

Masalah di Tangan

Pertimbangkan senario di mana anda mempunyai jadual "warna " dengan data berstruktur sebagai:

+----+----------------------+
| id | colors               |
+----+----------------------+
| 1  | Red,Green,Blue       |
| 2  | Orangered,Periwinkle |
+----+----------------------+
Salin selepas log masuk

Matlamat anda adalah untuk mengubah data ini menjadi lebih terperinci format:

+----+------------+
| id | colors     |
+----+------------+
| 1  | Red        |
| 1  | Green      |
| 1  | Blue       |
| 2  | Orangered  |
| 2  | Periwinkle |
+----+------------+
Salin selepas log masuk

Penyelesaian: Menyelami Kedalaman SQL

Untuk mencapai metamorfosis data ini, anda boleh memanfaatkan kuasa fungsi SUBSTRING_INDEX. Fungsi serba boleh ini membolehkan anda mengekstrak subrentetan tertentu berdasarkan pembatas.

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
Salin selepas log masuk

Menyingkap Mekanik di sebalik Pertanyaan

Pertanyaan luar memilih lajur "id" dan menggunakan fungsi SUBSTRING_INDEX dua kali bersarang untuk mengasingkan subrentetan yang dikehendaki. Seruan pertama SUBSTRING_INDEX mengekstrak subrentetan sehingga koma (n.digit 1)-ke, manakala seruan kedua kemudian mengekstrak subrentetan selepas koma (n.digit 1)-ke hujung rentetan.

INNER JOIN dengan subkueri memastikan bahawa fungsi SUBSTRING_INDEX digunakan untuk maksimum 4 subrentetan, sebagai ditakrifkan oleh lajur "digit" dalam subkueri. Untuk menyokong lebih banyak subrentetan, laraskan subkueri dengan sewajarnya.

Akhir sekali, klausa ORDER BY mengisih hasil mengikut "id" dan kemudian mengikut urutan berangka subrentetan untuk setiap baris.

Demo dan Kredit

Untuk demonstrasi praktikal, lawati biola yang dipautkan dalam rujukan yang disediakan.

Rujukan

[Ekstrak Berbilang Nilai daripada Senarai Dipisahkan Koma](https://www.data-generator.com/fiddle/d3c78f201137b4b56a63a9536b)

Atas ialah kandungan terperinci Bagaimana untuk Membalikkan GROUP_CONCAT MySQL: Memisahkan Rentetan Bercantum kepada Nilai Individu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan