ホームページ > データベース > mysql チュートリアル > MySQL の GROUP_CONCAT を元に戻す方法: 連結された文字列を個々の値に分割する?

MySQL の GROUP_CONCAT を元に戻す方法: 連結された文字列を個々の値に分割する?

Barbara Streisand
リリース: 2024-12-16 22:05:14
オリジナル
527 人が閲覧しました

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

MySQL における GROUP_CONCAT の逆関数の謎を解く

データ操作の領域では、GROUP_CONCAT 関数は複数の値を連結して単一の文字列。ただし、連結された文字列を個々の値に分割する逆の操作には課題が伴います。

当面の問題

テーブル "colors" があるシナリオを考えてみましょう。 " のデータ構造:

+----+----------------------+
| id | colors               |
+----+----------------------+
| 1  | Red,Green,Blue       |
| 2  | Orangered,Periwinkle |
+----+----------------------+
ログイン後にコピー

あなたの目標は、このデータをより詳細なデータに変換することです。 format:

+----+------------+
| id | colors     |
+----+------------+
| 1  | Red        |
| 1  | Green      |
| 1  | Blue       |
| 2  | Orangered  |
| 2  | Periwinkle |
+----+------------+
ログイン後にコピー

解決策: SQL の奥深くに飛び込む

このデータの変換を実現するには、SUBSTRING_INDEX 関数の機能を利用できます。この多用途関数を使用すると、区切り文字に基づいて特定の部分文字列を抽出できます。

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
ログイン後にコピー

クエリの背後にあるメカニズムを明らかにする

外側のクエリは、「id」列を選択し、は、SUBSTRING_INDEX 関数を 2 回ネストして、必要な部分文字列を分離します。 SUBSTRING_INDEX の最初の呼び出しでは、(n.digit 1) 番目のコンマまでの部分文字列が抽出され、2 回目の呼び出しでは、(n.digit 1) 番目のコンマ以降の部分文字列から文字列の末尾までが抽出されます。

サブクエリを使用した INNER JOIN により、SUBSTRING_INDEX 関数が最大 4 つの部分文字列に適用されます。サブクエリの「数字」列によって定義されます。より多くの部分文字列をサポートするには、それに応じてサブクエリを調整します。

最後に、ORDER BY 句は結果を「id」で並べ替え、次に各行の部分文字列の数値シーケンスで並べ替えます。

デモとクレジット

実際的なデモについては、リファレンスにリンクされているフィドルを参照してください。

参考資料

[カンマ区切りリストから複数の値を抽出](https://www.data-generator.com/fiddle/d3c78f201137b4b56a63a95332b8106b)

以上がMySQL の GROUP_CONCAT を元に戻す方法: 連結された文字列を個々の値に分割する?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート