2016-04-09 64 views
1

我有1個表中存儲值。我們稱他們爲「寶石」。SQL限制插入/更新的數據

我做了一個按鈕,在submit上添加/更新表+10「寶石」。

我不知道是否有任何方法來限制插入的數據,而不使用JavaScript。例如,我的目標是每天限制100顆寶石。或限制每天的最大點擊次數。任何建議如何做到這一點?

我想:

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'和日期> todayAtMidnight')。如果計數小於10,那麼您可以向點擊表添加新條目,並像您最初計劃的那樣更新揹包表。 – markwatsonatx

回答

0

您可以在一個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 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>;