📝
いまさら MySQL で group_concat 使い複数レコードを1行にまとめる
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)
Discussion