Isso é o que é chamado de
Upsert
. A sintaxe do MySQL é bem estranha, mas você pode fazer isso, algo como:INSERT INTO eventcounter (userID, eventID, activityID) VALUES(1,1,1)
ON DUPLICATE KEY UPDATE
activityID = VALUES(activityID)
Ele só funciona para PKs duplicados (não para qualquer campo que você goste), então neste caso só funcionaria se
userID
e eventID
compor o PK e você só deseja alterar o activityID
Caso contrário, você pode seguir a rota IF-ELSE, algo como:
DECLARE mycount INT;
SET mycount = (SELECT COUNT(*) FROM eventcounter WHERE userID=1 AND eventID=1);
IF mycount > 0 THEN
UPDATE eventcounter SET activityID=1 WHERE userID=1 AND eventID=1;
ELSE
INSERT INTO eventcounter (userID, eventID, activityID) VALUES(1,1,1);
END IF;
Isenção de responsabilidade:código totalmente não testado