mysql - 如何向列添加计数器?

时间:2014-01-28 02:44:21

标签: php mysql database

每个活动都有50个参与者。

每次用户注册活动时,他的姓名,电子邮件和手机号码都会被注册。被保存在数据库中。所以每当注册时我都会插入这些值:ID, p_name, p_mobile, p_email, p_event最后一列是事件的名称。

我需要添加一个名为p_max的新列,其中每个唯一事件会自动增加1。一种反击。

因此,我可以通过获取具有事件名称的最后一行的p_max列来检查是否达到最大值。

我希望我能清楚地解释这个问题。请随意提出问题以便澄清。

提前致谢!

2 个答案:

答案 0 :(得分:1)

如果我正确理解了这个问题,您需要在确认注册之前检查特定事件的用户数。

因此,您不需要新列(或者它将是事件表中您可以指定每个事件的最大参与者数量的列),您需要检查该特定事件的已有用户数。

您可以使用类似的内容来查询数据库:

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

答案 1 :(得分:0)

首先,您需要一个具有最大参与者数量的事件表。

然后在参与者表上需要一个before insert触发器。如果满足以下条件,则此触发器将失败:

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;

一旦达到最大值,此插入不会插入任何行。