Мне нужно создать систему точек в MySQL, точки добавляются в зависимости от позиции определенного столбца. Пример: есть 5 игроков, игрок с самым высоким счетом в строке «Завоеватель» получает 5 очков, 2-й игрок получает 4 балла, 3-й игрок 3 балла и т. Д. Это хранимая процедура, которую я бы назвал при расчете очки:Обновление на основе численного значения строки
BEGIN
select Player_name into @a from Player where Conqueror = (select max(Conqueror) from Player);
select Player_name into @b from Player where Conqueror = (select max(Conqueror) from Player where Player_name != @a);
select Player_name into @c from Player where Conqueror = (select max(Conqueror) from Player where Player_name != @a and Player_name != @b);
select Player_name into @d from Player where Conqueror = (select max(Conqueror) from Player where Player_name != @a and Player_name [email protected] and Player_name [email protected]);
select Player_name into @e from Player where Conqueror = (select max(Conqueror) from Player where Player_name != @a and Player_name [email protected] and Player_name [email protected] and Player_name [email protected]);
select count(Conqueror) into @playernum from Player;
update Player set Points = Points + @playernum where Player_name = @a;
update Player set Points = Points + @playernum-1 where Player_name = @b;
update Player set Points = Points + @playernum-2 where Player_name = @c;
update Player set Points = Points + @playernum-3 where Player_name = @d;
update Player set Points = Points + @playernum-4 where Player_name = @e;
END
Этот код выглядит ужасно, но он отлично работает, за исключением случаев, когда есть игроки с одинаковым счетом. В этом случае ошибка MySQL 1172 - результат, состоящий из более чем одной строки из-за двух или более имен Player_, добавляется к переменной. Может кто-нибудь, пожалуйста, дать мне представление о том, как это решить?
Просьба представить структуру таблицы. Похоже, у вас конфликты индексов. – cyadvert
В случае, когда у 2 игроков одинаковый счет Завоевателя, как бы вы наградили очки? То же самое для обоих, а затем пропустить следующего человека? Или что-то другое? – Matt
Это только одна таблица с несколькими столбцами, на ней нет указателей. Имя игрока VARCHAR (50) | Завоеватель INT | Wall_Breaker INT | Unbreakable INT – Voodoo