Posted at

いまさら MySQL で group_concat 使い複数レコードを1行にまとめる

More than 1 year has passed since last update.


group_concat って

複数レコードあるデータを1行にまとめ表示することが可能な命令です。DB2 でいうところの OCCURS っぽい感じって言っても分かる人すくないか…。


例えば

例えば、テーブルとカラム名のリストが欲しいっていったら、さっくり下記みたいなプログラムを書けばいいと思うのだけど(私は、phpで作っちゃう人)。

foreach ($ret_array as $key => $value ) {

$sql = <<< EOM
desc $value;
EOM;

$stmt = $pdo->query($sql);
$koumoku = "";
while($result = $stmt->fetch(PDO::FETCH_ASSOC)){
$Field = $result['Field'];
$koumoku = $koumoku . "\t" . $Field;
}

echo $value . "\t" . $koumoku . "\n";
}

こんなことしなくても、いいよとw


簡単に実現できるのね

group_concat 使うと楽ですな。

select TABLE_NAME, group_concat(COLUMN_NAME separator x'09')

from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME like 'S%'
group by TABLE_NAME
order by TABLE_NAME

結果、横に長くなるので切ったけど、思うようにとれた。便利やわー。

+-------------------+--------------------------------------------------

| TABLE_NAME | group_concat(COLUMN_NAME separator x'09')
+-------------------+--------------------------------------------------
| SCHEMATA | CATALOG_NAME SCHEMA_NAME
| SCHEMA_PRIVILEGES | IS_GRANTABLE PRIVILEGE_TYPE TABLE_SCHEMA
| SESSION_STATUS | VARIABLE_VALUE VARIABLE_NAME
| SESSION_VARIABLES | VARIABLE_NAME VARIABLE_VALUE
| STATISTICS | CARDINALITY SUB_PART PACKED NULLABLE
+-------------------+---------------------------------------------------
5 rows in set (0.02 sec)