Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 7 из 7
  1. #1
    Аватар для JohnConor
    Пользователь

    Статус
    Оффлайн
    Регистрация
    01.01.2017
    Сообщений
    11
    Репутация:
    1 ±

    Вопрос про sscanf

    Возможно ли как-то при использовании sscanf сохранять в опр место массива?

    Код:
    PHP код:
         cache_get_value_name(0"InvRow1",InvMassif[0],45);
         
    cache_get_value_name(0"InvRow2",InvMassif[1],45);
         
    sscanf(InvMassif[0], "p<,>a<i>[4]",InvContent1[playerid]);
         
    sscanf(InvMassif[1], "p<,>a<i>[4]",InvContent2[playerid]); 
    Это инвентарь в бд там по 4 ячейки хранится, а всего таких рядов 6 получается 24 ячейки в один массив, но как их закинуть через sscanf в один массив, ибо так получается не удобно использовать массив для каждого ряда с 0 по 3 для данных от инвентаря -*

  2. #2
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Я бы на твоём месте не занимался мазохизмом, пытаясь скомкать все данные в одной таблице, а просто создал отдельную таблицу под инвентарь и связал бы его с таблицей аккаунтов через ID этих самых аккаунтов. И удобнее будет редактировать данные из БД, и из мода работать с данными будет проще (если нужно будет сохранить какое-либо значение, не нужно будет заниматься форматированием строки и т.п.). Это не файлы, где не разгуляешься особо без бубна. SQL тем и хорош, что одной простой строкой (запросом) позволяет достать нужные данные

    Опиши подробнее как у тебя работает инвентарь и что именно ты в нём сохраняешь/планируешь сохранять. И я тебе подскажу какую структуру можно сделать для таблиц
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  3. Пользователь сказал cпасибо:
    JohnConor (05.05.2017)
  4. #3
    Аватар для JohnConor
    Пользователь

    Статус
    Оффлайн
    Регистрация
    01.01.2017
    Сообщений
    11
    Репутация:
    1 ±
    Я сразу это в другой таблице, а структура следующая 24 слота у инвентаря, у каждого слота 3 переменных (1 - ид хранимого слота, 2 - кол-во, 3 - различные данные о хранимых вещах)

    А ничего что мод будет сохранять/считывать/изменять 72 ячейки в бд будет, мне просто показалось что хранить по рядам лучше будет?

  5. #4
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от JohnConor Посмотреть сообщение
    Я сразу это в другой таблице, а структура следующая 24 слота у инвентаря, у каждого слота 3 переменных (1 - ид хранимого слота, 2 - кол-во, 3 - различные данные о хранимых вещах)

    А ничего что мод будет сохранять/считывать/изменять 72 ячейки в бд будет, мне просто показалось что хранить по рядам лучше будет?
    Так а зачем под каждый слот создавать столбец, когда можно записывать слот как строку?
    То бишь, таблица с инвентарём будет иметь такую структуру:
    PHP код:
    id //Просто ID строки. Является уникальным ключом тайблицы (AUTO_INCREMENT)
    account_id // ID владельца инвентаря
    slot // Номер слота из инвентаря
    item // Тут хранится ID предмета
    value // Тут хранится количество того предмета, что хранится в слоте 
    Ну и по желанию добавляешь нужные тебе столбцы
    В итоге у тебя получится система, где ты можешь работать с конкретным слотом и где количество этих слотов не ограничено со стороны базы данных (для добавления нового столбца просто увеличиваешь массивы и всё).

    В таблице данные будут выглядеть так:
    PHP код:
    1   12 0   1   30
    2   
    12 1   7   2
    3   
    12 2   7   5
    4   
    12 3   1   22
    5   
    12 4   9   11
    6   
    12 5   21  1
    7   
    12 6   1   30 
    Если слот пустой, просто не создавай/удаляй его.

    Загрузка будет максимально проста:
    PHP код:
    SELECT slotitemvalue FROM player_inventory WHERE accout_id 12//Весь инвентарь аккаунта с ID 12
    SELECT itemvalue FROM player_inventory WHERE accout_id 12  AND slot 12 //Определённый слот 
    Обновление данных тоже
    PHP код:
    UPDATE player_inventory SET item 22value 1 WHERE account_id 12 AND slot 0//Записываем в нулевой слот инвентаря предмет с ID 22 и количеством, равным единице 
    Последний раз редактировалось DeimoS; 02.06.2017 в 19:12.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  6. Пользователь сказал cпасибо:
    JohnConor (06.05.2017)
  7. #5
    Аватар для JohnConor
    Пользователь

    Статус
    Оффлайн
    Регистрация
    01.01.2017
    Сообщений
    11
    Репутация:
    1 ±


    Как то так получилось, а если таких записей около 9000 не будет задержки в чтении, при условии что считываться будет сначала с 6 id, а потом аж 550?
    Ну и последний вопрос обратил внимание что все твои запросы начинаются с маленькой буквы, это имеет значение?

  8. #6
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от JohnConor Посмотреть сообщение
    Как то так получилось, а если таких записей около 9000 не будет задержки в чтении, при условии что считываться будет сначала с 6 id, а потом аж 550?
    Вопрос следует иначе: будет ли заметна задержка в указанном тобой случае. Ответ - нет, не будет. MySQL и не на такое способна.
    Вообще почитай вот эту статью и все вложенные

    Цитата Сообщение от JohnConor Посмотреть сообщение
    Ну и последний вопрос обратил внимание что все твои запросы начинаются с маленькой буквы, это имеет значение?
    Исключительно ради собственного удобства, ибо если использовать в именах баз данных/таблиц или столбцов буквы разного регистра, то, собственно, нужно помнить не только сами имена, но и регистр букв в них. И банально можно просто опечататься, а после думать, почему же не обработался запрос. Да и в самих запросах более наглядно видно где находятся зарезервированные слова, а-ля "SELECT" или "UPDATE", а где имена столбцов и всего остального.
    Вообще вот тут есть хорошие рекомендации по работе с MySQL (если вместо текста будут иероглифы всякие, то промотай страницу в самый низ и смени язык сайта на русский) - в том числе и касаемо имен
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  9. Пользователь сказал cпасибо:
    JohnConor (06.05.2017)
  10. #7
    Аватар для JohnConor
    Пользователь

    Статус
    Оффлайн
    Регистрация
    01.01.2017
    Сообщений
    11
    Репутация:
    1 ±
    Благодарю за помощь, с БД только начал знакомиться, на sa-mp.com часто сижу

    Тему можно закрывать

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •