Php 无法更新表存储触发器,调用此存储函数/触发器的语句已使用它

Php 无法更新表存储触发器,调用此存储函数/触发器的语句已使用它,php,mysql,triggers,Php,Mysql,Triggers,我有一个用户表,它保存用户信息,它的最后一个活动列在用户每次看到页面时都会得到更新 public function set_last_activity(){ global $db; $t = time(); $sql = "UPDATE `users` SET `last_activity` = '$t' WHERE `id` = '$this->id' "; $db->query($sql); } 每个用户可以有3

我有一个用户表,它保存用户信息,它的最后一个活动列在用户每次看到页面时都会得到更新

   public function set_last_activity(){
    global $db;
    $t = time();
    $sql = "UPDATE `users` SET `last_activity` = '$t'
    WHERE 
   `id` = '$this->id'  ";
   $db->query($sql);   
   }
每个用户可以有3种类型 1-简称员工或ee 2-雇主或雇员 3-两种类型

状态字段为: 0:已禁用,未激活 1:主动

现在我有了触发器,它正在处理用户计数器

雇员就业服务柜台[类型:1,3],雇主就业服务柜台[类型:2,3]

在统计表中,当用户更改其状态0:禁止,1:活动,并且在用户为雇员的情况下更新特殊计数器

DELIMITER $$
CREATE TRIGGER user_status_change
  AFTER UPDATE
  ON users
  FOR EACH ROW
BEGIN
  UPDATE stats s 

 SET

    ee_counter =
      CASE 

        WHEN  (NEW.type= 1 || NEW.type= 3 )   && OLD.status !=1 && NEW.status  = 1  THEN ee_counter + 1
        WHEN  (NEW.type= 1 || NEW.type= 3 )   && OLD.status = 1 && NEW.status != 1  THEN ee_counter - 1

        WHEN  NEW.type= 3  && OLD.type  = 2   THEN ee_counter + 1
        WHEN  OLD.type= 1  && NEW.type  = 2   THEN ee_counter - 1
        ELSE ee_counter 
      END ,

    er_counter =
      CASE 
        WHEN  (NEW.type= 2 || NEW.type= 3 )   && OLD.status !=1 && NEW.status  = 1  THEN er_counter + 1
        WHEN  (NEW.type= 2 || NEW.type= 3 )   && OLD.status = 1 && NEW.status != 1  THEN er_counter - 1

        WHEN  NEW.type= 3  && OLD.type = 1   THEN er_counter + 1
        WHEN  OLD.type= 2  && NEW.type = 1   THEN er_counter - 1
        ELSE er_counter 
      END 

  WHERE
    s.id = 1;


  UPDATE specialitys s 
JOIN speciality_objects o
      ON s.id = o.speciality_id
    JOIN users u
      ON o.user_id = u.id
 SET
    counter =
      CASE 
        WHEN  NEW.status = 1  && OLD.status !=1 THEN counter + 1
        WHEN  NEW.status != 1 && OLD.status = 1 THEN counter - 1
         ELSE counter 
      END 

  WHERE
  o.user_id = NEW.id &&  s.id = o.speciality_id ;

END $$

DELIMITER ;
在我更换主机并购买了vps之前,它一直工作得很好

不,我一直在犯这个错误

Database query failed: Can't update table 'users' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
当我更新上一个_活动时,在每个页面上


我尝试使用Prefore UPDATE,因为有人建议它不起作用,但仍然会出现此错误

我认为此错误是由触发器中上次更新查询的一部分导致的,而该部分查询毫无意义

Database query failed: Can't update table 'users' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
由于查询的这一部分,错误消息正在抱怨:

JOIN users u
  ON o.user_id = u.id
…您已将触发器附加到的表加入到触发器内的更新查询中。MySQL正确地发现这可能导致递归,并抛出错误

但是,您应该能够简单地删除查询的该部分。别名u不在任何地方使用,因此不需要联接。我认为这会解决问题