MySQL

いまさら 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)