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 | +----+----------------------+
Matlamat anda adalah untuk mengubah data ini menjadi lebih terperinci format:
+----+------------+ | id | colors | +----+------------+ | 1 | Red | | 1 | Green | | 1 | Blue | | 2 | Orangered | | 2 | Periwinkle | +----+------------+
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
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!