あなたは1つのMySQLのクエリでそれを行うことができます。毎日100個の宝石の限界に10個の宝石を追加したいとします。ここに私の試みは、次のとおりです。
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>;
あなたは間違いなくやるべきではありませんそれはクライアント側または人々の制限を回避する方法を見つけ、自分自身に "宝石"を与えるでしょう – Terminus
私は念頭に置いてトランザクションを持っていません、ダウンロードの限界として使用されるだけのバーチャルcurency。 – Aco
私は最初のコメントに同意します。あなたはサーバー上でこれを行う必要があり、あなたはuser_idと日付で各クリックを追跡する必要があります。ユーザーがクリックすると、その日のカウントがチェックされます( 'SELECT COUNT(*)FROMクリックWHERE member = '$ user_id' AND date> todayAtMidnight')。カウントが10未満の場合は、クリックテーブルに新しいエントリを追加し、元の計画と同じようにバックパックテーブルを更新することができます。 – markwatsonatx