ホームページ >データベース >mysql チュートリアル >MySQL の GROUP_CONCAT を逆にして、連結されたデータを分離するにはどうすればよいですか?

MySQL の GROUP_CONCAT を逆にして、連結されたデータを分離するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-15 08:33:18793ブラウズ

How Can I Reverse MySQL's GROUP_CONCAT to Separate Concatenated Data?

GROUP_CONCAT の効果の逆転: 連結データの分割

MySQL では、GROUP_CONCAT 関数は特定のカラムの複数の値を 1 つの値に結合します。カンマ区切りの文字列。ただし、逆の効果、つまり連結された文字列が個々のコンポーネントに分解されることを望む場合もあります。

分割を実現するクエリ

これを実現するには、次のクエリを使用します。

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

詳細

  • SUBSTRING_INDEX 関数: この関数は、指定された区切り文字の最初の出現位置から始まる、文字列から n 番目の部分文字列を抽出します。このクエリでは、各色の部分文字列を分離するために複数回使用されています。
  • UNION 演算子: UNION 演算子は、複数の SELECT ステートメントの結果を 1 つのテーブルに結合します。ここでは、色の部分文字列の位置を表す一連の数値を返します。
  • digit 1: これは、各色の部分文字列の先頭にあるカンマ区切り文字をスキップするために、数字の値に 1 を加えます。 .
  • LENGTH 関数: この関数は文字列の長さを計算します。ここでは、数値が色の文字列の長さの範囲内にあることを確認するために使用されます。

サンプル データと出力

サンプル データの場合提供:

+----+----------------------+
| id | colors               |
+----+----------------------+
| 1  | Red,Green,Blue       |
| 2  | Orangered,Periwinkle |
+----+----------------------+

クエリの出力は次のようになります:

+----+------------+
| id | colors     |
+----+------------+
| 1  | Red        |
| 1  | Green      |
| 1  | Blue       |
| 2  | Orangered  |
| 2  | Periwinkle |
+----+------------+

以上がMySQL の GROUP_CONCAT を逆にして、連結されたデータを分離するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。