2016-04-09 15 views
1

私は値を格納する1つのテーブルを持っています。それらを「宝石」と呼んでみましょう。SQL制限の挿入/更新データ

submitにテーブル+10「宝石」を追加/更新するボタンを作った。

JavaScriptを使用せずに挿入されたデータを制限する方法があるかどうかわかりません。たとえば、私の目標は1日あたり100個の宝石を制限することです。 1日あたりの最大クリック数を制限する。それを作る方法に関する提案はありますか?

私が試した:

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

あなたは間違いなくやるべきではありませんそれはクライアント側または人々の制限を回避する方法を見つけ、自分自身に "宝石"を与えるでしょう – Terminus

+0

私は念頭に置いてトランザクションを持っていません、ダウンロードの限界として使用されるだけのバーチャルcurency。 – Aco

+0

私は最初のコメントに同意します。あなたはサーバー上でこれを行う必要があり、あなたはuser_idと日付で各クリックを追跡する必要があります。ユーザーがクリックすると、その日のカウントがチェックされます( 'SELECT COUNT(*)FROMクリックWHERE member = '$ user_id' AND date> todayAtMidnight')。カウントが10未満の場合は、クリックテーブルに新しいエントリを追加し、元の計画と同じようにバックパックテーブルを更新することができます。 – markwatsonatx

答えて

0

あなたは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>;