JSONオブジェクトから文字列の配列を取得しています。これらの文字列をDBに保存したいのですが、まだそこにない場合に限ります。 DBに既に入っているものと私が入力しようとしているものを比較し、マッチを除外する最良の方法は何ですか?レコードが存在しない場合にのみMySQLテーブルに追加するには?
私はPHPとMySQLを使用しています。
JSONオブジェクトから文字列の配列を取得しています。これらの文字列をDBに保存したいのですが、まだそこにない場合に限ります。 DBに既に入っているものと私が入力しようとしているものを比較し、マッチを除外する最良の方法は何ですか?レコードが存在しない場合にのみMySQLテーブルに追加するには?
私はPHPとMySQLを使用しています。
あなたは、文字列がすでに存在する場合のみ、レコードを残したいと思っている記述何ので、あなたはおそらくしたいことはINSERT
からIGNORE
修飾子です(つまり、あなたがINSERT IGNORE ...
を行います)。重複したキーが見つかった場合は、クエリによって何も行われません。これには、もちろん、挿入する文字列フィールドに独自のキーが必要です。
REPLACEは挿入しますが、主キーがすでに存在する場合はその行が最初に削除されます。テーブルに他の列を保持する必要がない場合は、それが機能するはずです。
MySqlでは、「ignore」オプション付きのinsert文を使用できます。このオプションは、一意のフィールドが既存の行のフィールドと一致する場合は行を挿入しません。テーブルには、関連フィールドを含む一意制約が必要です。
非常に簡単な例:
あなたのテーブル:ユーザー あなたのフィールド:ユーザーINTO USER_NAME
INSERT(USER_NAME、ZIP_CODE、作成された) VALUES (:users_id、USER_NAME、ZIP_CODEは、 ユニークインデックスを作成'joe'、75034、 '2009-06-11') 重複キー更新でのユーザーID = LAST_INSERT_ID(ID)
user_nameには一意のインデックスがあります。したがって、それを複数回追加することはできません。上記のSQLを使用すると、最初はうまく追加されます。 2回目は、実際には挿入されません。 on duplicate keyが設定されている方法で、PHPでmysqlの最後のinsert idを取得し、users_idが本当の挿入物か複製物かを知ることができるようになりました。
['INSERT ... ON DUPLICATE KEY UPDATE'](http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html)参照:[" INSERT IGNORE " vs "INSERT ... ON DUPLICATE KEY UPDATE"](http://stackoverflow.com/questions/548541/insert-ignore-vs-insert-on-duplicate-key-update) – troelskn