2010-09-12 79 views
1

我想用兩個其他表的信息更新MySQL表。我將設置一個cron作業,但我不知道要使用哪個PHP代碼。更新MySQL表的PHP代碼

每次運行cron作業時,我都希望「配置文件」表格中的'VideoNumber'列能夠更新他們上傳到網站的視頻數量。視頻信息存儲在名爲「視頻」的表格中,每個視頻都有一個「OwnerID」來標識上傳該視頻的用戶。這對應於'Profiles'表中的'ID'列。

我還希望'個人資料'表中的'照片編號'欄更新爲同一用戶上傳的照片數量 - 照片數據存儲在'照片'列中。

任何人都可以幫忙嗎?

回答

0

你做錯了。在創建/刪除新視頻/照片後立即更新這些列的值。您可以附上交易中的所有內容,以確保一切正常:

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 ; 
+0

INSERT觸發器起作用。當視頻被刪除時,我會用什麼觸發器? – hohner 2010-09-12 22:35:14

+0

我想通了,你用「OLD.profile_id」替換「+ 1」爲「 - 1」和「NEW.profile_id」。謝謝 – hohner 2010-09-12 22:41:12

+0

P.S.,如果有人正在讀這個問題 - 我真的建議改變Crozin建議的PHP代碼。觸發器是可以的,但在我看來,它們更容易被黑客攻擊。另外,令我懷疑的是,有些主機拒絕讓你通過SQL命令在phpMyAdmin上創建觸發器。除非您購買VPS或專用服務器套件,當然... – hohner 2010-09-18 01:29:24

0

您必須首先從這兩個表中選擇數據,將某些數據分配給INSERT並將其傳遞。

+0

的OP想要更新配置文件表。 – 2010-09-12 21:55:02