我正在制作一个带有积分和奖励系统的网站,用户收集点数,如果用户点数符合要求,用户将获得奖励并升级。
例如,这是我的用户表
id | username | level | point
1 | nameuser | 0 | 0
奖励:
idaward | awardname | pointreq | badgeid
1 | LEVEL ONE | 10 | 1
等等,我有100多个用户奖。
奖励日志
idlog | userid | awardid | badgeid | givendate
我的目的是检查用户是否符合资格或符合获得奖励的要求。徽章?
流程:
Users have a point -> check if user meets the requirement to level up & get award
-> Users will leveled up and get a reward (insert the info. to award log)
If users already have it then ignore it.
我正在使用Laravel,所以如果您可以进行Laravel查询,我会非常感激,但我也会接受原始MySQL查询。
谢谢
答案 0 :(得分:0)
您可以执行以下更新查询:
UPDATE user
SET level = level + 1
WHERE
id = ?
AND EXISTS (
SELECT * FROM award WHERE pointreq <= user.point
AND awardid NOT IN (
SELECT awardid from awardlog WHERE userid = user.id
)
);
如果更新返回1,那么您需要在奖励日志表中插入一个条目,您可以使用以下SELECT
和INSERT
查询:
SELECT * FROM award WHERE pointreq <= user.point
AND awardid NOT IN (
SELECT awardid from awardlog WHERE userid = user.id
);
您可以从上述查询中获取awardid和badgeid并插入奖励日志。
此外,您需要确保在单个事务中执行所有3个查询(UPDATE
,SELECT
和INSERT
)以保持一致性。