MySQL вопрос
#1

Появился интересный вопрос. Вот у меня к примеру,у меня есть ачивки на сервере(более 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);
    }
Надеюсь понятно обьяснил
Reply
#2

а почему бы просто не player | achievement
Reply
#3

Quote:
Originally Posted by S4D
View Post
а почему бы просто не player | achievement
подробней? я вас вообще не понял.
Reply
#4

Второй вариант. Насчет первого вообще не понятно - ты собираешься создать общую базу с ачивками (не связанную с аккаунтами игроков) и что-то там обновлять (или у тебя одна ачивка доступна только для одного игрока?) или ты имеешь ввиду в базе с аккаунтами создать дополнительные поля под ачивки? Если так, то все ровно второй вариант, поскольку полей слишком много.
Reply
#5

Quote:
Originally Posted by gensek4
View Post
Второй вариант. Насчет первого вообще не понятно - ты собираешься создать общую базу с ачивками (не связанную с аккаунтами игроков) и что-то там обновлять (или у тебя одна ачивка доступна только для одного игрока?) или ты имеешь ввиду в базе с аккаунтами создать дополнительные поля под ачивки? Если так, то все ровно второй вариант, поскольку полей слишком много.
окей,буду юзать второй вариант.


первый вариант:
да все верно. собирался создать общую базу с ачивками и вносить туда каждого игрока при регистрации.
когда игрок получил ачивку,делал бы примерный SQL запрос:
Code:
UPDATE achievements SET achivka_%d = '%d' WHERE pID = '%d'
по сути,это такая же таблица как и accounts только с ачивками.
Reply
#6

Quote:
Originally Posted by Stuntff
View Post
подробней? я вас вообще не понял.
Code:
{1, "дров нарубил"},
{2, "верстак скрафтил"}
id аккаунта, id полученной ачивки.
Code:
INSERT INTO achievements (uid, aid) VALUES (1, 2)
Удобнее же
Reply
#7

Оба варианта неверные.
Должно быть:
  • Таблица пользователей [id, ...]
  • Таблица ачивок [id, ...]
  • Таблица связей [achievement_id, usr_id, create_date]
Reply
#8

Создать таблицу самих ачивок, где будет хранится 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 - максимальное кол-во ачивок на сервере, которые можно получить
Reply
#9

Quote:
Originally Posted by MichaelKonsta
View Post
Создать таблицу самих ачивок, где будет хранится 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, не стоит их разделять.
Reply


Forum Jump:


Users browsing this thread: 7 Guest(s)