SQL限制插入/更新的数据


SQL limit inserted/updated data

我有一个表,其中存储值。让我们称它们为"宝石"。

我制作了一个按钮,在submit上添加/更新表+10个"宝石"。

我不知道是否有任何方法可以在不使用javascript的情况下限制插入的数据。例如,我的目标是每天限制100颗宝石。或者限制每天的最大点击次数。有什么建议吗?

我试过了:

UPDATE backpack SET gems = gems + 10 WHERE member = '$user_id'";

您可以在一个mySQL查询中完成。假设你想添加10个宝石,每天限制100个宝石。这是我的尝试:

CREATE TABLE `Gems` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT,
  `gems` int(11),
  `gCount` varchar(45),
  `gDate` date,
  PRIMARY KEY (`user_id`)
) ;
INSERT INTO `Gems` VALUES 
(1,220,'100','2016-04-09'),
(2,310,'50','2016-04-09'),
(3,110,'20','2016-04-08');
| user_id | gems | gCount |      gDate |
|---------|------|--------|------------|
|       1 |  220 |    100 | 2016-04-09 |
|       2 |  320 |     60 | 2016-04-09 |
|       3 |  110 |     20 | 2016-04-08 |

所以你需要的逻辑是:

if gDate >= CURDATE and gCount < 100 and gCount+10 <= 100
{
    gems = gems + 10;
    gCount = gCount + 10;
}
else if gDate < CURDATE
{
    gDate = CURDATE;
    gCount = 10;
    gems = gems + 10;
}

以及等效的mySQL Update语句,它将完成这项工作:

UPDATE Gems 
SET 
    gems = IF((gDate >= CURDATE() AND gCount < 100 AND gCount+10 <= 100)
            OR gDate < CURDATE(),
        gems + 10,
        gems),
    gCount = IF((gDate >= CURDATE() AND gCount < 100 AND gCount+10 <= 100),
        gCount + 10,
        IF(gDate < CURDATE(), 10, gCount)),
    gDate = IF(gDate < CURDATE(), CURDATE(), gDate)
WHERE
    user_id = <user_id>;