sql — таблица лидеров / рекорд по игре в стек переполнения

У меня проблема с таблицей лидеров PHP, где мне нужно создать таблицу лидеров для людей, которые используют мою программу.

Программа отправляет результаты в базу данных, а затем отображает все игровые результаты для выбранного игрока на отдельной странице. Результаты удаляются из базы данных через 24 часа. Что мне нужно, так это использовать другую базу данных (которая у меня уже есть) в том же php, которая используется для отправки игровых очков. Но вместо этого новая функция должна отправлять результаты в другую базу данных (эта функция не будет очищать результаты).

Предполагается, что функция добавляет новую строку в базу данных, только если пользователь, который играл, не существует. Если игрок существует и счет отправлен, я бы хотел, чтобы результаты были добавлены в тот же столбец и подсчитаны (сумма).

Например: игрок получил 10 убийств и 10 смертей. Он играет в новую игру, и его счет — 5 убийств и 5 смертей. База данных будет автоматически суммировать этот счет с предыдущим, что приведет к изменению его столбца БД с 10 убийств и 10 смертей на 15 убийств и 15 смертей (математика / сумма / добавленная или мы называем это 5 убийствами и 5 смертями) , Ну так есть ли способ сделать это? Цель таблицы лидеров — не показывать наибольшее количество очков пользователя, а его общее количество убийств и общее количество смертей за все время.

Какие-либо предложения?

-8

Решение

Вместо того, чтобы делать это псевдо:

Сценарий 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
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]