2016-04-27 118 views
0

所以我有這樣的觸發器:錯誤關於MySQL觸發器執行

CREATE TRIGGER `onUpdatePlayerTracker` AFTER UPDATE ON `playtracker` 
FOR EACH ROW UPDATE players 
SET deckplayedmost = (SELECT deckname 
        FROM playTracker 
        WHERE playerID = old.playerID 
        AND amount = (SELECT max(amount) 
            FROM playtracker 
            WHERE playerID = old.playerID 
            LIMIT 1)) 
, 

deckplayedleast =(SELECT deckname 
        FROM playTracker 
        WHERE playerID = old.playerID 
        AND amount = (SELECT min(amount) 
            FROM playtracker 
            WHERE playerID = old.playerID 
            LIMIT 1)) 

,當我嘗試更新playtracker

PLAYTRACKER 
PlayerID DeckName Amount 
    6  Space  1 
    4  Space  0 
    3  Space  1 
    5  Space  2 
    2  Space  1 
    1  Space  3 
    6  Sky   3 
    5  Sky   1 
    4  Sky   2 
    2  Sky   0 
    1  Sky   3 
    3  Sky   1 
    5  Ocean  3 
    4  Ocean  3 
    3  Ocean  0 
    1  Ocean  8 
    2  Ocean  4 
    6  Ocean  2 
    3  Mystic  2 
    2  Mystic  3 
    5  Mystic  2 
    6  Mystic  4 
    4  Mystic  1 
    1  Mystic  1 
    4  Forest  1 
    6  Forest  5 
    5  Forest  2 
    3  Forest  1 
    2  Forest  2 
    1  Forest  3 
    6  Desert  3 
    5  Desert  4 
    4  Desert  2 
    3  Desert  1 
    2  Desert  3 
    1  Desert  2 

應觸發扳機,我得到一個錯誤說法更新無法完成,因爲結果包含多於一行。它沒有指定多重收益來自何處。它應該更新下面的球員表。

Players 
PlayerID PlayerName DeckPlayedMost DeckPlayedLeast  FavCardType  
1   Daniel  Ocean   Mystic    Duel 
2   Gavin  Ocean   Mystic    Event 
3   Patrick Ocean   Mystic    Exchange 
4   Joe  Ocean   Mystic    Attack 
5   George  Ocean   Mystic    Event 
6   Robert  Ocean   Mystic    Rares 

包含此文字作爲我的文章包含太多的代碼,沒有足夠的解釋。就像我認爲我已經提供了足夠的解釋,我知道它可能會更好,更詳細,什麼不是,但我是新來的。坦率地說,我仍然很驚訝,人們回覆!我的意思是我很感激,學習可以是一個艱難的挑戰,是對自我的真正考驗,我感謝你們所有人的幫助。使它的壓力更容易管理。

回答

1

這將擺脫該錯誤,但我沒有看到,如果您的查詢是否正確,否則。

SET deckplayedmost = (SELECT deckname 
        FROM playTracker 
        WHERE playerID = old.playerID 
        AND amount = (SELECT max(amount) 
            FROM playtracker 
            WHERE playerID = old.playerID 
            LIMIT 1) 
        LIMIT 1) 
, 

deckplayedleast =(SELECT deckname 
        FROM playTracker 
        WHERE playerID = old.playerID 
        AND amount = (SELECT min(amount) 
            FROM playtracker 
            WHERE playerID = old.playerID 
            LIMIT 1) 
        LIMIT 1) 
+0

非常感謝。這解決了這一切。我還有另一個錯誤。謝謝你的幫助。 – bloopiebloopie