ユーザー情報を保持するユーザーテーブルがあり、ユーザーがページを表示するたびにlast_activity列が更新されています。 0:禁止され、アクティブでない 1 - 3雇用者またはER - ショート 2のための従業員またはEE - 両方のタイプ このストアドファンクション/トリガーを呼び出したステートメントで既にテーブル格納トリガーを更新できません。
とステータス・フィールドである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を持つことができます:アクティブ
今私はトリガーを持っており、それがユーザーのカウンター
を取り扱うだ employes [タイプ:1,3]について(ee_counter採用のため、er_counter ER [TYPE:2,3]統計表内)
ユーザがステータス(0変更:禁止、1:アクティブ)と、それが特別料理、ユーザがemploye
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 ;
場合カウンタ更新それは私が私のホストを変更するまで、正常に動作するために使用して
はありません私はlast_activityを更新したときにすべてのページにこのエラー
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.
を得ることに保つVPSを買っいくつかは、それは私がこのエラーはとにかく無意味であるトリガ内の最後のUPDATE
クエリの一部に起因していると思う。このエラー