重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

こんにちは。

PHP5とMySQL5を使っています。
CSVファイルを読み込み、キーが存在するレコードは更新、
存在しなければ追加、という処理について
色々な書き方を教えて頂けたらと思います。

例えば、フィールドは、ユニークキーとなる[ID]、
[Name]、[TEL]の3つとします。

1.CSV読む
2.行と列の2次元配列に格納
3.行数分ループ開始
3-1.IDをキーに、SELECT
3-2.存在したら
3-3.UPDATE更新
3-2.存在しなかったら
3-3.INSERT追加
4.行数分ループ終了
と考えています。

CSVに100行あったら、100回SELECT掛けることになりますが、
この書き方で問題ないでしょうか?

もっと判り易い、こんな書き方も!
というのがありましたら、是非頂けますでしょうか。

よろしくお願いします。

A 回答 (2件)

いくつか方法が考えられますが、MySQLの場合、一番簡単なのはREPLACE構文を使う方法だと思います。


http://dev.mysql.com/doc/refman/4.1/ja/replace.h …

他にも、SELECTをしないで済む方法はあります。例えば、とりあえず無条件にINSERTしてみて重複エラーだったらUPDATEするとか、逆に無条件にUPDATEしてみてaffected_rows(UPDATEされた行数)が0だったらINSERTするとか。
    • good
    • 0
この回答へのお礼

ありがとうございます!

>例えば、とりあえず無条件にINSERTしてみて
>重複エラーだったらUPDATEするとか、
>逆に無条件にUPDATEしてみてaffected_rows(UPDATEされた行数)が
>0だったらINSERTするとか。

これいいですね!!
これにしよ!!!
勉強になりました!最高です!!!

お礼日時:2007/03/31 11:43

それでいいと思いますが他のやり方もご提案



1.新規テーブルを作成
2.CSVを読み込んで新規テーブルに全てINSERT
3.SELECT文で存在しているIDをアップデート
4.その他の行は全てINSERT
3.1で作成したテーブルを削除

こんなやりかもいかがでしょうか?
    • good
    • 0
この回答へのお礼

ありがとうございます!

勉強になります!!

お礼日時:2007/03/31 11:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!