我有一個用戶表,它保持用戶信息,它的last_activity列在每次用戶看到一個頁面時都得到更新。不能更新表存儲的觸發器,它已經被調用此存儲函數/觸發器的語句使用
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 - 爲短 2僱員或EE - 僱主或呃 3 - 這兩種類型的
和狀態字段是: 0:禁止,不活躍 1 :活性
現在我有觸發和它處理用戶計數器
(ee_counter爲聘用過的員工[類型:1,3],對於er_counter僱用ER [類型: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.
在每一頁上,當我更新last_activity
我試圖BEFORE UPDATE使用一些曾建議沒有奏效仍然收到此錯誤