每个活动都有50个参与者。
每次用户注册活动时,他的姓名,电子邮件和手机号码都会被注册。被保存在数据库中。所以每当注册时我都会插入这些值:ID, p_name, p_mobile, p_email, p_event
最后一列是事件的名称。
我需要添加一个名为p_max
的新列,其中每个唯一事件会自动增加1。一种反击。
因此,我可以通过获取具有事件名称的最后一行的p_max列来检查是否达到最大值。
我希望我能清楚地解释这个问题。请随意提出问题以便澄清。
提前致谢!
答案 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;
一旦达到最大值,此插入不会插入任何行。