2016-04-27 2 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

Смежные вопросы