0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

MysqlのTips And Tricks - Part 1

Posted at

皆さん、こんにちは!

ウェブ開発の時に、絶対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の面白いことに関して、結構ありますね。次の記事でまた一緒に話しましょう!
読んでくれ、ありがとうございました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?