我有一个SQL表,其中包含用户可以链接到其配置文件的项列表。SQL表如下所示:
Item_Activity_ID Item_ID User_ID Status Date-Added
1 1 1 1 2015-06-08
2 2 2 1 2015-06-08
3 1 1 0 2015-06-09该条目显示用户的id为1的用户两次添加项目id 1,唯一被更改的是日期和状态。我希望这样做,以便在给出INSERT语句时,例如:
INSERT INTO items (Item_ID, User_ID, Status, Date_Added) VALUES ('$x', '$y', 1, CURDATE()) IF EXISTS SOME Item_ID = $x AND User_ID = $y UPDATE items SET Status = 1, Date_Added = CURDATE() WHERE Item_ID = $x AND User_ID = $yItem_Activity_ID是一个auto_incremented主键索引。如何在一次查询中完成这一任务?两个用户可以拥有相同的项,但是不应该重复相同用户id和项id的条目。
发布于 2015-04-21 21:15:53
Item_ID, UserID组合创建一个唯一的索引,请务必对$x和$y进行消毒,以防止注入SQL!
发布于 2015-04-21 21:19:40
首先,我要添加一个唯一的键索引:
ALTER TABLE items
ADD CONSTRAINT uc_UserItem UNIQUE (Item_ID,User_ID);然后,只需修改插入查询:
INSERT INTO items (Item_ID, User_ID, Status, Date_Added) VALUES ('$x', '$y', 1, CURDATE()) ON DUPLICATE KEY UPDATE Status=VALUES(1), Date_Added=VALUES(CURDATE());发布于 2015-04-21 21:16:54
首先,假设用户和项已经存在,尝试执行更新。然后检查此更新是否影响任何行(在Server中使用@@rowcount )。如果没有,则执行插入。别忘了把以上两条语句放在交易中.;)
https://stackoverflow.com/questions/29783165
复制相似问题