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不在任何地方使用,因此不需要联接。我认为这会解决问题