いつもPHPやnode.jsで取得してからfor文で要素に追加していた自分が情けない、外出自粛により在宅ワークな筆者です。
PHP ExcelDataTablesライブラリを使って、selectしスクレイピングしたデータをそのままExcelDataTablesに渡したかったんですが、エクセルのある列(column)には追記したい文字列があったんですね。
select後のデータを、 その追加文字列の為に foreach()で回すなんて!と思い、ググっていたらconcat()で解決できると・・・
そもそものググるキーワード選定が難しい・・
mysql select時に文字列追記
で出てきました。思ったことを検索キーワードに書けばいいんですが、まだまだですね自分・・
1.concat()を使う
Concatenate=連結する でconcat()ですね。
カンマ,区切りでテーブルのカラムでも良いし、追記したい文字列でもOKです。
下記な感じでvcardテーブルにはid,no,name,…があったとして、no=名前 というように出してくれます。
select id, concat(no,'=',name) as yourname from vcard; id, yourname 1 10=山田 2 8=林
これを以前まではPHPとかで、リスト取得してforeach()で回していました・・
$datalist = $db->get_list(); foreach( $datalist as $d ){ $d->yourname = "{$d->no}={$d->name}"; }
1.1 joinしたテーブルも勿論使える
他のテーブルをjoinしconcat()することも勿論出来ます。
select r.id as id, concat(r.name, s.sub) as storename from ranktbl r left join store s on r.id=s.rankid where ...;
便利。データベースの関数は人がこうだったらいいなと思うことは大体網羅されていますよね、そりゃ・・ドキュメント改めて見てみようと思いました。
2. どのくらい負荷が増えるかは未計測
とは言え、DB側の処理が増えるので負荷が多少なりともかかるかと。
すみません、未計測です。
9.参考リンク

MySQLで使える文字列結合方法 – プロエンジニア
フリーランスITエンジニア専門の案件紹介・転職支援エージェント【プロエンジニア】
コメント