MySQL вопрос -
Stuntff - 18.08.2016
Появился интересный вопрос. Вот у меня к примеру,у меня есть ачивки на сервере(более 250 штук),как будет лучше их хранить?
у меня есть два варианта но может вы дадите совет как лучше хранить.
1 вариант:
при регистрации создать новую базу с 250 полями под ачивки. когда игрок получает ачивку - просто менять значение в базе ачивок.
2 вариант:
при регистрации создать новую табличку с ачивками. когда игрок получает ачивку - делать запрос ALTER TABLE `achievements` ADD `AchivkaНОМЕР АЧИВКИ` INT( 1 ) NOT NULL DEFAULT '1'.
код загрузки будет примерно такой:
Code:
PlayerInfo[playerid][pAchivki] = cache_get_field_content_int(0,"total_player_achivki",database);//получаем общее количество ачивок с бд ачивок.
//делаем запрос в бд с ачивками и берем данные
for(new i = 0; i < PlayerInfo[playerid][pAchivki]; i++)
{
new str[32];
format(str,sizeof(str),"achivka_%d",i);
PlayerInfo[playerid][pAchivka][i] = cache_get_field_content_int(0,str,database);
}
Надеюсь понятно обьяснил
Re: MySQL вопрос -
S4D - 18.08.2016
а почему бы просто не player | achievement
Re: MySQL вопрос -
Stuntff - 18.08.2016
Quote:
Originally Posted by S4D
а почему бы просто не player | achievement
|
подробней? я вас вообще не понял.
Re: MySQL вопрос -
gensek4 - 18.08.2016
Второй вариант. Насчет первого вообще не понятно - ты собираешься создать общую базу с ачивками (не связанную с аккаунтами игроков) и что-то там обновлять (или у тебя одна ачивка доступна только для одного игрока?) или ты имеешь ввиду в базе с аккаунтами создать дополнительные поля под ачивки? Если так, то все ровно второй вариант, поскольку полей слишком много.
Re: MySQL вопрос -
Stuntff - 18.08.2016
Quote:
Originally Posted by gensek4
Второй вариант. Насчет первого вообще не понятно - ты собираешься создать общую базу с ачивками (не связанную с аккаунтами игроков) и что-то там обновлять (или у тебя одна ачивка доступна только для одного игрока?) или ты имеешь ввиду в базе с аккаунтами создать дополнительные поля под ачивки? Если так, то все ровно второй вариант, поскольку полей слишком много.
|
окей,буду юзать второй вариант.
первый вариант:
да все верно. собирался создать общую базу с ачивками и вносить туда каждого игрока при регистрации.
когда игрок получил ачивку,делал бы примерный SQL запрос:
Code:
UPDATE achievements SET achivka_%d = '%d' WHERE pID = '%d'
по сути,это такая же таблица как и accounts только с ачивками.
Re: MySQL вопрос -
S4D - 18.08.2016
Quote:
Originally Posted by Stuntff
подробней? я вас вообще не понял.
|
Code:
{1, "дров нарубил"},
{2, "верстак скрафтил"}
id аккаунта, id полученной ачивки.
Code:
INSERT INTO achievements (uid, aid) VALUES (1, 2)
Удобнее же
Re: MySQL вопрос -
Stepashka - 18.08.2016
Оба варианта неверные.
Должно быть:
- Таблица пользователей [id, ...]
- Таблица ачивок [id, ...]
- Таблица связей [achievement_id, usr_id, create_date]
Re: MySQL вопрос -
MichaelKonsta - 18.08.2016
Создать таблицу самих ачивок, где будет хранится primary key, id/логин игрока (в базе данных), id ачивки, дата получения ачивки.
Создать функцию, которая будет давать игроку ачивки, например giveAchievement(playerid, achievementid);
Где после необходимой проверки, получения id/логина в бд, создавать в таблице ачивку для игрока с определенными параметрами.
А для получения информации об ачивках, например
'SELECT * FROM `achievements` WHERE `login` = '%s' ORDER BY `date` DESC LIMIT %i', playername_or_id, total_achievements)
playername_or_id - айди/логин игрока в базе данных, или ключ
total_achievements - максимальное кол-во ачивок на сервере, которые можно получить
Re: MySQL вопрос -
Stepashka - 19.08.2016
Quote:
Originally Posted by MichaelKonsta
Создать таблицу самих ачивок, где будет хранится primary key, id/логин игрока (в базе данных), id ачивки, дата получения ачивки.
Создать функцию, которая будет давать игроку ачивки, например giveAchievement(playerid, achievementid);
Где после необходимой проверки, получения id/логина в бд, создавать в таблице ачивку для игрока с определенными параметрами.
А для получения информации об ачивках, например
'SELECT * FROM `achievements` WHERE `login` = '%s' ORDER BY `date` DESC LIMIT %i', playername_or_id, total_achievements)
playername_or_id - айди/логин игрока в базе данных, или ключ
total_achievements - максимальное кол-во ачивок на сервере, которые можно получить
|
Ни в коем случае не надо хранить поле игрока в таблице ачивок!
А идентификатор ачивки сам по себе должен быть primary key, не стоит их разделять.