更新并感谢 @ypercube 的答案和贡献。
以下是答案,我已经自行发布,并按照我的PHP助手将其编写成了PDO格式。
INSERT INTO `users_relationship` (`profile_1_id`, `profile_2_id` ,`request_date`,`auth_token`,`status`, `updated`, `deleted`)
VALUES
(:uid, :fid, '$now', '$fToken', 0, '$now',0),
(:fid, :uid, '$now', '$fToken', 0, '$now',0)
ON DUPLICATE KEY UPDATE request_date = VALUES(request_date), auth_token = VALUES(auth_token), updated = VALUES(updated), deleted = VALUES (deleted);
我有一个MySQL查询让我感到困惑,要求我同时在表中创建两行数据,但这些行可能已经存在,因此我需要更新这些行中的某些列而不是插入重复项。
例如:
Justin(2)与Ben(5)有关联,然后通过更新数据库中profile_1_id为2或5的行并将标志插入删除列来终止关系。然后Ben试图重新点燃关系,因此我们需要再次更新这些行并删除删除标志,并使用新值更新请求日期、授权令牌和更新时间戳。
我编写了以下代码,但出现错误:
重复的列名'2012-09-05 10:13:06'
INSERT INTO `users_relationship` (`profile_1_id`, `profile_2_id`,`request_date`,`auth_token`,`status`, `updated`, `deleted`)
SELECT * FROM
(SELECT 2, 5, '2012-09-05 10:13:06', 'SQLTEST', 0, '2012-09-05 10:13:06', 0) AS faTmp,
(SELECT 5, 2, '2012-09-05 10:13:06', 'SQLTEST', 0, '2012-09-05 10:13:06', 0) AS fTmp
WHERE NOT EXISTS
(SELECT * FROM `users_relationship`WHERE `profile_1_id`=2 AND `profile_2_id` =5) OR
(SELECT * FROM `users_relationship`WHERE `profile_1_id`=5 AND `profile_2_id` =2) LIMIT 1
我现在的做法是否正确,或者有更好的方法可以实现吗?
谢谢。
贾斯汀
(profile1, profile2)
设置唯一键将允许(2,5)
和(5,2)
。 - ypercubeᵀᴹrequest_date
为VALUES('2012-09-05 10:13:06'),auth_token
为VALUES('SQLTEST'),updated
为VALUES('2012-09-05 10:13:06'),deleted
为VALUES(0); - Justin Erswell