У меня проблема с таблицей лидеров PHP, где мне нужно создать таблицу лидеров для людей, которые используют мою программу.
Программа отправляет результаты в базу данных, а затем отображает все игровые результаты для выбранного игрока на отдельной странице. Результаты удаляются из базы данных через 24 часа. Что мне нужно, так это использовать другую базу данных (которая у меня уже есть) в том же php, которая используется для отправки игровых очков. Но вместо этого новая функция должна отправлять результаты в другую базу данных (эта функция не будет очищать результаты).
Предполагается, что функция добавляет новую строку в базу данных, только если пользователь, который играл, не существует. Если игрок существует и счет отправлен, я бы хотел, чтобы результаты были добавлены в тот же столбец и подсчитаны (сумма).
Например: игрок получил 10 убийств и 10 смертей. Он играет в новую игру, и его счет — 5 убийств и 5 смертей. База данных будет автоматически суммировать этот счет с предыдущим, что приведет к изменению его столбца БД с 10 убийств и 10 смертей на 15 убийств и 15 смертей (математика / сумма / добавленная или мы называем это 5 убийствами и 5 смертями) , Ну так есть ли способ сделать это? Цель таблицы лидеров — не показывать наибольшее количество очков пользователя, а его общее количество убийств и общее количество смертей за все время.
Какие-либо предложения?
Вместо того, чтобы делать это псевдо:
Сценарий 1:
// user exists
// determine current score
// update user, current score + new game score
Сценарий 2:
// user does not exist
// insert user with new game score
Здесь вы пытаетесь обновлять одну строку с самым последним итогом. Хотя это, безусловно, можно сделать, это можно сделать проще, если вы в порядке с группой и фактически отслеживаете все игры, а не просто суммарную статистику. Вы можете получить итоговая общая статистика от отдельных частей.
GameRecord:
playId int primary key identity
userId int
deaths int
kills int
был ли у пользователя «GameRecord» раньше, не имеет значения.
-- Game 1
insert into GameRecord (userId, deaths, kills)
values (42, 0, 5)
-- Game 2
insert into GameRecord (userId, deaths, kills)
values (42, 1, 5)
-- Game 3
insert into GameRecord (userId, deaths, kills)
values (1, 0, 1)
С этими данными, вместо того, чтобы держать «скользящий итог», вы просто ведете учет каждой игры. Тогда вы можете делать такие вещи, как:
select
userId,
count(1) as totalGamesPlayed,
sum(deaths) as totalDeaths,
sum(kills) as totalKills
from GameRecord
group by userId
Возвращает:
userId totalGamesPlayed totalDeaths totalKills
42 2 1 10
1 1 0 1
Других решений пока нет …