2012-01-11 7 views
2

PHPを使用すると、MySQLデータベースにレコードが挿入されます。レコードが新しい場合、私はinsert_idを取得しますが、すでに存在する場合は、単一のクエリを使用してIDを取得することはできません。次のクエリの(MySQLインサートを使用)は、存在するレコードのIDを見つけることができません。

の両方が、それはすでに存在しているなら、私はレコードを追加したり、スキップすることができます:

INSERT INTO `emails` (`email`) VALUE ('[email protected]') ON DUPLICATE KEY UPDATE `id`=`id` 

INSERT IGNORE INTO `emails` (`email`) VALUE ('[email protected]') 

両方のケースで正しい結果を得るための正しい方法は何ですか?

EDIT:ここに私のテーブルの構文は次のとおりです:

CREATE TABLE `emails` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `email` varchar(255) NOT NULL DEFAULT '', 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `email` (`email`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

答えて

3

私はそれがINSERT_IDで終わるLAST_INSERT_IDの値だと思われます。

MySQLのマニュアルから引用してください。

は、次のように行を挿入、更新用LAST_INSERT_ID()が有意義なものにするには:

INSERT INTO table (a,b,c) VALUES (1,2,3) 
    ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), c=3; 

出典:http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

+0

これは、データが実際に更新されている場合にのみ動作しますです。データが変更されない場合、彼は以前と同じボートに入っています。 – webbiedave

+0

私はこの回答が気に入っています**このアプリケーションの目的が何であるかを知る必要があります**。ユーザー登録の場合、「id」を変更すると大きな問題が発生する可能性があります(つまり、何かを挿入したり既存のデータを変更しようとする前にメールアドレスが存在するかどうかを確認する必要があります)。それでも、私は何かを学んだので+1: – msanford

+0

ありがとうが、私はmsanfordと同意する必要があります。 – inhan