обновить строку, если она уже существует, или вставить новую запись в таблицу, используя mysql - PullRequest
0 голосов
/ 22 апреля 2020
SELECT * FROM user_referral;

id     user_id    new_user_id   bonus_type        amount 
1      123                         own             25 
2      234                         own             25    
3      123         456            referral         25    

SELECT * FROM user_points;
id          user_id           referral_points                  
 1          123                     50       
 2          234                     25          

Я работаю для приложения, и у меня есть две таблицы, как указано выше. Если пользователь присоединится к моему приложению, он получит некоторый бонус.

, когда пользователь присоединится, он получит 25 рупий, а когда он снова пригласит другого друга, он получит еще 25. Поэтому первая запись будет равна user_referral таблица, в которой будет храниться отдельная сумма, а для конкретного пользователя общая сумма будет храниться в user_points таблица.

Теперь я пишу триггер в user_referral таблица для обновления суммы в Таблица user_points с использованием mysql, я хочу проверить, существует ли пользователь в таблице user_points , эту сумму следует обновить, иначе она должна вставить новую запись.

Я пробовал, если еще условие, но его нет работает, я не знаю, как проверять дубликаты записей ..

if (SELECT user_id FROM user_points WHERE user_id IN (SELECT new.user_id FROM user_referral)) then
update user_points set
referral_points=referral_points+new.point,
updated_time=new.inserted_time;
else
INSERT INTO user_points (user_id,referral_points,updated_time)
VALUES (new.user_id, new.point, new.inserted_time);
end if;

Также я попытался использовать при обновлении дубликата ключа, но в моем случае он вставляет новую строку, вместо этого следует обновить предыдущую.

Любая помощь будет оценена ..

1 Ответ

0 голосов
/ 22 апреля 2020

Рассмотрим синтаксис insert ... on duplicate key:

insert into user_points(user_id, referral_points)
values(:user_id, :referral_points)
on duplicate key update referral_points = referral_points + values(referral_points)

Чтобы это работало, вам необходимо уникальное ограничение на user_points(user_id).

Когда insert происходит на user_id что уже существует, MySQL переходит к предложению on duplicate key, где новое значение referral_points добавляется к существующему значению.

...