我正在尝试建立一个网站,人们可以注册活动+分配给该活动的活动。他们可以选择他们想要参加哪一个,甚至两个。
为此,我创建了一个名为“eventCounter”的表
Image of table
userID,eventID和activityID都是FK poiting到其他表。
他们应该能够更新当前的“状态”,以便他们在注册活动后加入活动。
所以我的问题是:我如何制作如果否则说明行是否存在更新其他插入
IF EXISTS(select userID, eventID, activityID from eventCounter where userID=1 and eventID=1)
THEN
UPDATE eventcounter SET activityID=1 WHERE userID=1;
ELSE
INSERT INTO eventcounter (userID, activityID) VALUES(1,1)
我认为ON DUPLICATE键不起作用,因为我需要检查2列?
答案 0 :(得分:1)
这就是所谓的Upsert
。 MySQL的语法非常奇怪,但你可以这样做,比如:
INSERT INTO eventcounter (userID, eventID, activityID) VALUES(1,1,1)
ON DUPLICATE KEY UPDATE
activityID = VALUES(activityID)
它仅适用于重复的PK(不适用于您喜欢的任何字段),因此在这种情况下,仅当userID
和eventID
组成PK并且您只想更改{时{1}}
否则,您可以使用IF-ELSE路线,例如:
activityID
免责声明:完全未经测试的代码
答案 1 :(得分:0)
@Jcl
的回答:您必须记住的一件事是,此语句仅在插入时 PRIMARY KEY
或 UNIQUE INDEX
发生重复时才有效(所以不仅 PK
但 index
也有效)!
SQL command:
INSERT INTO fooTable (RowNum, name, lastname, userID, score) VALUES(3,'Michael','Widenius','1012141618',19.75)
ON DUPLICATE KEY UPDATE name = 'Allan', lastname = 'Larsson', userNum = '2022242628', score = 10.50;
注意:
VALUES()
来引用新的行和列(Reference)MYSQL 8.0
和 PHP Mysqli
上进行了测试。name
、lastname
和 userID
,以防记录已经存在并且 score
就足够了!< /li>
我发现它非常直接且易于执行,您几乎可以检查案例中每个重要字段的重复(使用 UNIQUE INDEX
s)! 记住第一行...