你做錯了。在創建/刪除新視頻/照片後立即更新這些列的值。您可以附上交易中的所有內容,以確保一切正常:
BEGIN TRANSACTION;
INSERT INTO videos VALUES (...);
UPDATE profiles SET videosCount = videosCount + 1 WHERE id = ?;
COMMIT;
BEGIN TRANSACTION;
DELETE FROM videos WHERE id = ?;
UPDATE profiles SET videosCount = videosCount - 1 WHERE id = ?;
COMMIT;
對照片做同樣的事情。
你甚至可以使用triggers讓一切更清晰(即讓數據庫手柄增加/減少計列的值)
DELIMITER \\
CREATE TRIGGER abc AFTER INSERT ON videos
FOR EACH ROW BEGIN
UPDATE profiles SET videosCount = videosCount + 1 WHERE id = NEW.profile_id;
END\\
DELIMITER ;
INSERT觸發器起作用。當視頻被刪除時,我會用什麼觸發器? – hohner 2010-09-12 22:35:14
我想通了,你用「OLD.profile_id」替換「+ 1」爲「 - 1」和「NEW.profile_id」。謝謝 – hohner 2010-09-12 22:41:12
P.S.,如果有人正在讀這個問題 - 我真的建議改變Crozin建議的PHP代碼。觸發器是可以的,但在我看來,它們更容易被黑客攻擊。另外,令我懷疑的是,有些主機拒絕讓你通過SQL命令在phpMyAdmin上創建觸發器。除非您購買VPS或專用服務器套件,當然... – hohner 2010-09-18 01:29:24