2015-04-06 147 views
-2

我已經從Xenforo兩個表:Mysql的多個表同步

xf_user 
xf_user_authenticate 

xf_user存儲除了密碼哈希值,它們被存儲在一個xf_user_authenticate用戶的所有信息。

這兩個表具有相同的列,名爲user_id

當數據被插入到xf_user_authenticate我需要得到新的插排的user_id,然後使用該user_idxf_user獲取用戶名,並將其值設置爲xf_user_authenticate

我嘗試這樣的代碼,但它不工作:

CREATE TRIGGER name_sync AFTER INSERT ON xf_user_authenticate 
begin 
SELECT 'username' INTO @username FROM xenforo.xf_user WHERE 'user_id'=NEW.user_id; 
UPDATE xenforo.xf_user_authenticate SET 'username' = @username; 
end 

回答

0

你有幾個語法有關的問題,另外你要更新,你必須插入觸發器後同桌。您可能需要插入之前觸發更改爲

delimiter // 
create trigger name_sync before insert on xf_user_authenticate 
for each row 
begin 
declare user_name_sel varchar(100); 
select user_name into user_name_sel 
from xf_user 
where user_id = NEW.user_id; 
set new.username = user_name_sel; 
end;// 

delimiter ; 
+0

同...再次錯誤:#1064 - 你在你的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以獲得在第4行「'附近使用的正確語法 – 1461748123 2015-04-06 10:36:00

+0

您是否在msql cli或phpmyadmin上運行此操作。 – 2015-04-06 10:37:46

+0

phpmyadmin,我應該在MySQL客戶端運行它嗎? – 1461748123 2015-04-06 10:47:55

-1
CREATE TRIGGER name_sync BEFORE INSERT ON xf_user_authenticate 
BEGIN 
    DECLARE cUsername VARCHAR(255); 

    SELECT username INTO cUsername FROM xenforo.xf_user WHERE user_id=NEW.user_id; 
    SET NEW.username = cUsername; 
END 
+0

它返回一個錯誤:#1064 - 你的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以找到在第2行'BEGIN DECLARE cUsername VARCHAR(255)'附近使用的正確語法 – 1461748123 2015-04-06 10:34:45