Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysql-如何向列添加计数器?_Php_Mysql_Database - Fatal编程技术网

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

Php mysql-如何向列添加计数器?,php,mysql,database,Php,Mysql,Database,我有最多50人参加的活动 每次用户注册活动时,其姓名、电子邮件和手机号码都会保存在数据库中。因此,每当注册时,我都会插入这些值:ID、p_name、p_mobile、p_email、p_event最后一列是事件的名称 我需要添加一个名为p_max的新列,其中对于每个唯一的事件,它将自动增加1。一种计数器 因此,我可以通过获取带有事件名称的最后一行的p_max列来检查是否达到了最大值 我希望我能把问题解释清楚。请随时提出问题进行澄清 提前谢谢 如果我理解正确,在确认注册之前,您需要检查特定活动的用

我有最多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的固定数字,这个计数是每个事件的。