检查用户是为了满足MySQL

时间:2017-03-26 11:23:01

标签: php mysql laravel

我正在制作一个带有积分和奖励系统的网站,用户收集点数,如果用户点数符合要求,用户将获得奖励并升级。

例如,这是我的用户表

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查询。

谢谢

1 个答案:

答案 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,那么您需要在奖励日志表中插入一个条目,您可以使用以下SELECTINSERT查询:

SELECT * FROM award WHERE pointreq <= user.point 
AND awardid NOT IN (
   SELECT awardid from awardlog WHERE userid = user.id
);

您可以从上述查询中获取awardid和badgeid并插入奖励日志。

此外,您需要确保在单个事务中执行所有3个查询(UPDATESELECTINSERT)以保持一致性。