我正在制作一个带有积分和奖励系统的网站,用户可以在其中收集积分,如果用户积分满足要求,用户将获得奖励并升级。
例如,这是我的用户表
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 查询。
谢谢
最佳答案
您可以执行以下更新查询:
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,那么您需要在 awardlog 表中插入一个条目,您可以使用以下 SELECT
和 INSERT
查询:
SELECT * FROM award WHERE pointreq <= user.point
AND awardid NOT IN (
SELECT awardid from awardlog WHERE userid = user.id
);
您可以从上述查询中获取 awardid 和 badgeid 并插入到 awardlog 中。
此外,您需要确保所有 3 个查询(UPDATE
、SELECT
和 INSERT
)都在单个事务中执行以确保一致性。
关于php - 检查用户是为了满足MySQL的要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43028076/