皆さん、こんにちは!
ウェブ開発の時に、絶対CSVインポートとエクスポート機能を作ったことがありますね!
今日はインポートという機能について、話したいです。
場合によって、フローが違いますが今日よく使っているフローにより、話します。
一般的なインポートフロー
1. ファイルを読み込む
2. テーブル(仮)にインサートする
3. 担当者が確認できるの為に、テーブル(仮)のデータをひょうじします
・問題が会ったら、トランザクションをキャンセルし(データ無効また削除する)
・OKだったら、次のステップへ
4. テーブル(仮)から、本テーブルにデータを挿入する
(君のフローは違えば、こめんとし、教えてくださいね!)
4. テーブル(仮)から、本テーブルにデータを挿入する
ステップで、どうやってしていますか?
例えば、テーブル(仮)に200レコードがある場合
今回、メンバーのコードをリビューした時に、彼は下の方法をやりました!
200回loopでインサートしました。
foreach($users as $user) {
$this->Model->save($user);
}
上記の方法の代わりに、1クエリーだけで、処理できます。
Insert multiple records between 2 tables with only a query
$sql = "INSERT INTO users (name, name_reading, login_id, email)
SELECT
name, name_reading, login_id, email
FROM
import_buffer
WHERE
operation_id = ?
";
もちろん、インポート更新時も、同様にできます。
Update multiple records between 2 table with only a query
$sql = "UPDATE
users u, import_buffer b
SET
u.name = b.name,
u.name_reading = b.name_reading,
u.email = b.email,
u.updated_at = b.created_at
WHERE
u.username = b.username
AND b.is_update = 1
";
以上です。
MYSQLの面白いことに関して、結構ありますね。次の記事でまた一緒に話しましょう!
読んでくれ、ありがとうございました。