php - 检查用户是为了满足MySQL的要求

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

谢谢

最佳答案

您可以执行以下更新查询:

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 表中插入一个条目,您可以使用以下 SELECTINSERT 查询:

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

您可以从上述查询中获取 awardid 和 badgeid 并插入到 awardlog 中。

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

关于php - 检查用户是为了满足MySQL的要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43028076/

相关文章:

php - SQL - 将 DateTime 与当前时间进行比较

mysql - 仅选择具有链接记录的记录

php - 即使更换实际 key 后,谷歌验证码也无法工作

php - 在共享主机中仅使用 FTP 部署 Laravel 5

php - 在 PHP 中使用共享内存

javascript - 使用 Javascript append 构建列表

php - foreach 循环未显示所需结果

php - android使用php连接到mysql的asynctask

javascript - 在 Laravel 5.3 中动态更改图像

php - 产品的 Javascript 图片框