これは何度も聞かれていることを知っており、ほとんどの質問を確認しましたが、私の問題に合った答えが見つかりませんでした.
私はテーブルを持っています:
CREATE TABLE `users` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(50) NOT NULL,
`Email` varchar(50) NOT NULL,
`Added_Date` date DEFAULT NULL,
PRIMARY KEY (`Id`,`Email`)
)
画面からこのテーブルにレコードを挿入し、ユーザーに友人の名前を尋ねName
ますEmailId
。
私がやりたいことは、同じ電子メールIDがユーザーテーブルに存在する場合は、電子メールIDを確認してから、name
入力したものを更新することです。それ以外の場合は、新しいレコードを挿入します。どちらの場合も、挿入または更新されたレコードの userId が必要です。
シンプルですね!
しかしReplace
、試してみましたがInsert.. on duplicate key update
、insert where not exists
どれもうまくいきませんでした。これは私がこれまでに試したことです:
交換
REPLACE INTO Users SET email = 'a@d.c';
ただし、name
チェックされていないため、これは毎回新しいレコードを挿入し続けます。正しく使用できているかどうかわかりません。
INSERT.. ON DUPLICATE KEY UPDATE
insert into Users (id, Name, Email, Added_date) values (null, 'ABCD', 'adb@di.co',current_date) on duplicate key update Name='XYZ';
テーブルの主キーは (id と emailid) の組み合わせであり、ID は自動増分であるため、毎回新しいレコードが挿入されるため、これは機能しません。
特定の email_id を持つレコードが存在するかどうかを確認するクエリを作成できることはわかっていupdate
ます。存在する場合は更新され、そうでない場合insert
は新しいレコードになります。を使用して、インクリメントされた新しい ID を取得できます$userId = mysql_insert_id();
。しかし、更新クエリの場合、どうすれば ID を取得できますか?
更新クエリと挿入クエリを別々に記述するよりも、このことを行うためのより良い方法が必要であると私は信じています。