2014-01-28 15 views
0

我有一些活動,每個活動都有50位參與者。mysql - 如何將計數器添加到列?

每當用戶註冊一個事件,他的名字,電子郵件和移動號碼。被保存在數據庫中。所以我在註冊時插入這些值:ID, p_name, p_mobile, p_email, p_event最後一列是事件的名稱。

我需要添加一個名爲p_max的新列,其中每個獨特事件會自動增加1。一種櫃檯。

因此,我可以通過獲取帶有事件名稱的最後一行的p_max列來檢查是否達到了最大值。

我希望我能清楚地解釋這個問題。隨時提出澄清問題。

在此先感謝!

回答

1

如果我正確理解問題,則需要在確認註冊之前檢查特定事件的用戶數量。

因此,您不需要一個新的列(或者它將成爲事件表中的一列,您可以指定每個事件的最大參與者數量),您需要檢查該特定事件已有多少用戶。

你可以使用像這樣來查詢數據庫:

SELECT COUNT(*) as number_of_participants FROM users WHERE p_event = YOUR_EVENT_ID 
+0

是的。但是如果我有**每個**事件的次數,我可以做到這一點。 – user2772219

+0

@ user2772219我不確定你的意思,你說的固定數量是50,這個數字是每個事件。 – jeroen

0

首先,你要一個事件表內,有參與者的最大數量。

然後,您需要在參與者表上插入觸發器之前。如果滿足以下條件,此觸發器將失敗:

select (count(*) >= max(e.maxparticipants)) 
from participants p join 
    events e 
    on p.event = e.event 
where event = new.event; 

這些將限制事件中的參與者數量。

如果在存儲過程中包裝insert邏輯,也可以在存儲過程而不是觸發器中實現此功能。

或者,您可以直接在您的應用程序中實現此邏輯,但我認爲在數據庫中實現它更安全。如果您這樣做,請考慮以下聲明:

insert into participants(<columns go here>) 
    select <column values go here> 
    from dual 
    where (select max(e.maxparticipants) - COUNT(*)) 
      from participants p join 
       events e 
       on p.event = e.event 
      where event = THEEVENT 
     ) > 0; 

此插入操作在達到最大值後不會插入任何行。