Php mysql-如何向列添加计数器?
我有最多50人参加的活动 每次用户注册活动时,其姓名、电子邮件和手机号码都会保存在数据库中。因此,每当注册时,我都会插入这些值:ID、p_name、p_mobile、p_email、p_event最后一列是事件的名称 我需要添加一个名为p_max的新列,其中对于每个唯一的事件,它将自动增加1。一种计数器 因此,我可以通过获取带有事件名称的最后一行的p_max列来检查是否达到了最大值 我希望我能把问题解释清楚。请随时提出问题进行澄清Php mysql-如何向列添加计数器?,php,mysql,database,Php,Mysql,Database,我有最多50人参加的活动 每次用户注册活动时,其姓名、电子邮件和手机号码都会保存在数据库中。因此,每当注册时,我都会插入这些值:ID、p_name、p_mobile、p_email、p_event最后一列是事件的名称 我需要添加一个名为p_max的新列,其中对于每个唯一的事件,它将自动增加1。一种计数器 因此,我可以通过获取带有事件名称的最后一行的p_max列来检查是否达到了最大值 我希望我能把问题解释清楚。请随时提出问题进行澄清 提前谢谢 如果我理解正确,在确认注册之前,您需要检查特定活动的用
提前谢谢 如果我理解正确,在确认注册之前,您需要检查特定活动的用户数量 因此,您不需要新的列,或者它将是events表中的一列,您可以在其中指定每个事件的最大参与者数量,您需要检查该特定事件已有多少用户 您可以使用类似以下内容来查询数据库:
SELECT COUNT(*) as number_of_participants FROM users WHERE p_event = YOUR_EVENT_ID
首先,您需要一个事件表,该表具有最大数量的参与者 然后您需要在参与者表上设置一个before insert触发器。如果满足以下条件,此触发器将失败:
select (count(*) >= max(e.maxparticipants))
from participants p join
events e
on p.event = e.event
where event = new.event;
这将限制活动参与者的数量
如果将插入逻辑封装在存储过程中,还可以在存储过程而不是触发器中实现这一点
或者,您可以直接在应用程序中实现这个逻辑,尽管我认为在数据库中实现它更安全。如果你这样做,请考虑下面的陈述:
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;
一旦达到最大值,此插入将不会插入任何行。是。但是如果我有每个事件的计数,我可以这样做。@user2772219我不确定你的意思,你说的是一个50的固定数字,这个计数是每个事件的。