我知道这个问题已经被问过很多次了,我已经检查了大部分问题,但还没有找到适合我问题的答案。
我有一张桌子:
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 into Users (id, Name, Email, Added_date) values (null, 'ABCD', 'adb@di.co',current_date) on duplicate key update Name='XYZ';
这不会起作用,因为表的主键是 (id 和 emailid) 的组合,并且由于 ID 是自动递增的,所以它每次都会插入一条新记录。
我知道我可以编写一个update
查询来检查是否有任何具有特定 email_id 的记录,如果是,那么它将被更新,否则我将insert
创建一个新记录。我可以使用$userId = mysql_insert_id();
. 但是在更新查询的情况下如何获取 ID?
我相信必须有比分别编写更新和插入查询更好的方法来做这件事。