を使用するとMySQL
、次のようなことができます。
SELECT hobbies FROM peoples_hobbies WHERE person_id = 5;
私の出力:
shopping
fishing
coding
代わりに、1 行 1 列だけが欲しいのです:
期待される出力:
shopping, fishing, coding
その理由は、複数のテーブルから複数の値を選択し、すべての結合後に、必要な行数よりもはるかに多くの行が作成されるためです。
私は機能を探しましたMySQL ドキュメントCONCAT
また、またはCONCAT_WS
関数は結果セットを受け入れないようです。
それで、ここにいる誰かこれをどうやって行うのか知っていますか?
ベストアンサー1
使用できますGROUP_CONCAT
:
SELECT person_id,
GROUP_CONCAT(hobbies SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;
ルートヴィヒが述べたように彼のコメント、重複を避けるために演算子を追加できますDISTINCT
:
SELECT person_id,
GROUP_CONCAT(DISTINCT hobbies SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;
ジャンが述べたように彼らのコメント、次のようにして、値を並べ替えることもできますORDER BY
。
SELECT person_id,
GROUP_CONCAT(hobbies ORDER BY hobbies ASC SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;
ダグが述べたように彼のコメント、結果には 1024 バイトの制限があります。これを解決するには、クエリの前に次のクエリを実行します。
SET group_concat_max_len = 2048;
もちろん、2048
必要に応じて変更できます。値を計算して割り当てるには、次のようにします。
SET group_concat_max_len = CAST(
(SELECT SUM(LENGTH(hobbies)) + COUNT(*) * LENGTH(', ')
FROM peoples_hobbies
GROUP BY person_id) AS UNSIGNED);