Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 25

Тема: использование BlueG mysql plugin R7

  1. #1
    ?????? Аватар для Иваныч
    Регистрация
    10.02.2011
    Адрес
    Vlz
    Возраст
    28
    Сообщений
    4,152
    Репутация: 403

    Звание: - очень-очень хороший человек

    использование BlueG mysql plugin R7

    Йо

    С тех пор как плагин Mysql BlueG обновился до версии R7 в начале февраля, оказалось много людей, которые не смогли понять смысл новых запросов и как использовать кэш-функции.

    Итак изменения в R7:
    *Однопотоковые запросы больше не поддерживаются
    *Реализация кэша через функции cache_get_row, cache_get_field, cache_get_data, cache_get_field_content.
    *Новая фукнция mysql_function_query которая, в отличии от старой mysql_query_callback, позволяет скриптерам задавать переменные как параметры коллбека

    Преимущества использования кэша:
    * Он быстрее! Кэш функции заметно работают быстрее чем реализация через mysql_fetch_row.
    * Больше не придется сохранять/отчищать результат выполнения запроса mysql_store_result() mysql_free_result() больше не нужны. Стоит заметить что эти функции вызывали множество проблем
    у новичков

    Функции:

    mysql_function_query(идподключения, запрос[], bool:кэширование, паблик_для_обработки[], формат[], Параметры... )
    * Заменяет mysql_query и mysql_query_callback из старых версий
    * Позволяет скриптерам пускать в паблик_для_обработки с форматом[] параметров (очень похоже на CallRemoteFunction)


    mysql_function_query(dbHandle, "SELECT ... FROM ...", true, "OnQueryFinished", "siii", "Andre", 1, 2, 3);
    forward OnQueryFinished(name[], number_1, number_2, number_3);
    public OnQueryFinished(name[], number_1, number_2, number_3)
    {
    printf("Data: %s %i %i %i", name, number_1, number_2, number_3);
    // выведет в консоль: Data: Andre 1 2 3
    }


    Как вы можете заметить в использовании mysql_function_query , "siii" значит "string integer integer integer"(строка число число число), что обозначает данные "Andre 1 2 3", которые заданы в паблике.
    Больше не надо использовать глобальные переменные.

    * Скриптер сам выбирает в каких запросах стоит использовать кэширование а в каких нет. (3 аргумент функции)


    // SELECT запросы
    mysql_function_query(dbHandle, "SELECT * FROM players", true, "OnPlayerListLoad", "");
    // Мы задаем кэширование этому запросу и выполняем паблик "OnPlayerListLoad" после выполнения - этот паблик вызовется без параметров (пустые кавычки сигнализируют об этом)

    // Остальные (UPDATE и другие) запросы
    mysql_function_query(dbHandle, "UPDATE players SET kills = 10 WHERE id = 1", false, "", "");
    // Кэширование не задаем и паблик не вызываем.


    cache_get_data(&переменная_количества_строк, &переменная_количества_стобцов, ид подключения = 1)

    В большинстве случаев, после запросов на выборку, следует вызывать эту функцию(конечно же если в запросе включено кэширование), чтобы узнать точное количество столбцов и строк, полученных из базы
    Пример очень прост:

    mysql_function_query(dbHandle, "SELECT * FROM players WHERE name = 'Andre' LIMIT 0,1", true, "OnPlayerDataLoad", "s", "Andre");
    forward OnPlayerDataLoad(name[]);
    public OnPlayerDataLoad(name[])
    {
    new rows, fields;
    cache_get_data(rows, fields);
    if(!rows)
    {
    printf("%s не зарегистрирован на этом сервере!",name);
    }
    else
    {
    printf("%s зарегистрирован (1 строка с %d столбцами)",name, fields);
    }
    }


    cache_get_row(строка, индекс, строка_записи[], ид подключения = 1)
    Самая простейшая функция получения данных из запроса. В большинстве случаев она и применяется. Функция берет индекс строки, индекс столбца и записывает данные в строку записи(обязательно string)
    Подсчет индексов в базе идет с 0. Т.е.
    представим что в базе 3 стобца
    1. ID - индекс 0
    2. имя - индекс 1
    3. уровень - индекс 2


    new temp[12];
    cache_get_row(0, 0, temp);
    pritnf("ID - %d", strval(temp));
    cache_get_row(0, 2, temp);
    printf("Уровень - %d", strval(temp));

    Так как 3 параметр обязательно должен быть строкой, то для переноса значения в енам игрока(к примеру) следует делать следущее

    cache_get_row(0, 2, temp);
    PlayerInfo[playerid][pLevel] = strval(temp);

    cache_get_field(индекс_столбца, строка_записи[], идподключения = 1)
    Ничего интересного. Функция просто записывает в строку записи название столбца.


    cache_get_field_content(строка, название столбца[], строка записи[], идподключения = 1)
    Функция похожа на cache_get_row, но здесь вместо ида столбца задается его название.
    Стоит заметить тот факт, что cache_get_row выполняется чуточку быстрее, однако, он бесполезен в ситуациях, когда мы не знаем необходимые иды столбцов.

    Пример

    new temp[12];
    cache_get_field_content(0, "level", temp);
    printf("Уровень - %d", strval(temp));



    Конвертация мода с НЕмногопоточных запросов на многопоточные запросы

    Так как немногопоточные запросы больше не поддерживаются в плагине, стоит рассказать, как же сделать запросы многопоточными.
    Типичный пример СТАРОЙ(!!!) загрузки игрока:

    format(query, sizeof(query), "SELECT name,level,kills,deaths FROM players WHERE name = %s LIMIT 0,1", PlayerName);
    mysql_query(query);
    mysql_store_result();
    if(mysql_num_rows())
    {
    mysql_fetch_row(data);
    sscanf(data, "p<|>s[24]iii", name, level[playerid], kills[playerid], deaths[playerid]);
    }
    mysql_free_result();


    А теперь реализация той же самой загрузки через многопоточный запрос:

    format(query, sizeof(query), "SELECT name,level,kills,deaths FROM players WHERE name = '%s' LIMIT 0,1", PlayerName);
    mysql_function_query(dbHandle, query, true, "OnPlayerDataLoad", "i", playerid);

    // Где-нибудь в скрипте
    forward OnPlayerDataLoad(playerid);
    public OnPlayerDataLoad(playerid)
    {
    // получаем количество строк и столбцов, полученных в результате запроса
    new rows, fields;
    cache_get_data(rows, fields);
    if(rows)
    {
    cache_get_row(0, 0, name); // записываем данные из столбца name в строку name
    new temp[12]; // создаем временную строку для перевода числовых значений
    cache_get_row(0, 1, temp); // записываем данные из столбца с уровнем в строку temp
    level[playerid] = strval(temp); // записываем в массив
    // Тоже самое делаем с двумя следующими полями
    cache_get_row(0, 2, temp), kills[playerid] = strval(temp);
    cache_get_row(0, 3, temp), deaths[playerid] = strval(temp);
    }
    return 1;
    // возвращаем 1 для отчистки кэша в плагине.
    }


    Самый большой плюс от многопоточности заключается в том, что ваш сервер больше не зависает во время выполнения запроса. Это значит
    пока идет запрос, сервер будет заниматься другими делами. Благодаря возможностям R7, вам больше не придется отчищать память после запроса, и в итоге вы избегаете утечек памяти.

    На этом всё.

  2. #2
    Активный пользователь Аватар для happines
    Регистрация
    23.01.2011
    Адрес
    Белгород
    Сообщений
    1,591
    Репутация: 119

    Звание: скоро придёт к известности

    Re: использование BlueG mysql plugin R7

    Заебись, чо. Плюсану даже
    Всё в поряде, будте аккуратны, соблюдайте правила и не надо переживать... © Гуф

  3. #3
    Проверенный Аватар для vladeepslav
    Регистрация
    29.02.2012
    Адрес
    Казань
    Сообщений
    2,700
    Репутация: 224

    Звание: - весьма и весьма положительная личность

    Re: использование BlueG mysql plugin R7

    полезно
    как раз начинаю изучать MySQL. Вовремя ты
    Гость форума ~ с января 2012
    Пользователь с 29.02.2012
    VIP пользователь ~ с 1.04.2012
    Проверенный ~ с 28.05.2012
    Супер-Модератор с 09.07.2013
    Проверенный ~ с 24.10.2013

    Связь со мной - VK в профиле.

  4. #4
    ? FreeLancer ? Аватар для RastaOrecha
    Регистрация
    12.07.2011
    Адрес
    Челябинск
    Возраст
    26
    Сообщений
    1,857
    Репутация: 229

    Звание: - весьма и весьма положительная личность

    Re: использование BlueG mysql plugin R7

    Тоже MySQL начал изучать, спасибо большое



    Код:
    PAWN:
    
    • [PAWN Wiki] Пишем регистрацию с 0 на Y_INI
    • [PAWN Wiki] Использование YCMD (y_commands) + SSCANF 2.x
    • [PAWN Wiki] Использование Y_Timers
    • [PAWN Wiki] Разделяем мод на инклуды (y_hooks)
    • [PAWN Wiki] Использование UVar
    • [PAWN Wiki] Единая тема оптимизации
    • [Интересные комманды] Cмена ника MySQL 
    • [Интересные комманды] Full Set
    • [Интересные комманды] Телепорт по указанным координатам 
    • [Скрипты и инклуды] jBank System [version 1]
    • [Скрипты и инклуды] jRegistration System
    
    Lua:
    • [Wiki] Создание мода с 0
    • [Wiki] Дерево элементов | new
    • [Wiki] Бинд клавиш или комманда на кнопку
    • [Func] eachOther (повторение числа/строки) | new
    Маппинг:
    
    • [MAP] Квартира в центре (приятный вид)
    • [Source] Маленькое помещение с видом из окна
    • [Source] Пустое помещение с панорамными окнами
    
    HTML, JavaScript:
    
    • [HTML] Подключение таблицы стилей CSS к HTML
    • [HTML][CSS] Красивый текст снизу картинки
    
    C#, C++ :
    
    • [C++] Действие на кнопку (при нажатии на кнопку)
    • [C++] Работа с файлами
    • [C++] Склоняем






    “When you have insomnia, you're never really asleep. And you're really awake.”
    “Никогда не указывайте на ошибки, если не знаете, как их исправить.” - Бернард Шоу.
    “Если ты способен выдумать что-то, ты можешь и сделать это.” - Уолт Дисней.
    “Великие умы обсуждают идеи; средние умы обсуждают события; мелкие умы обсуждают людей.” - Элеонор Рузвельт.

  5. #5
    Активный пользователь Аватар для Fekoz
    Регистрация
    02.10.2011
    Адрес
    МОЁ ?
    Возраст
    33
    Сообщений
    1,992
    Репутация: 72

    Звание: скоро придёт к известности

    Re: использование BlueG mysql plugin R7

    Тригга скажи плиз -
    что лучше из: Р5 или Р6 ?

  6. #6
    ?????? Аватар для Иваныч
    Регистрация
    10.02.2011
    Адрес
    Vlz
    Возраст
    28
    Сообщений
    4,152
    Репутация: 403

    Звание: - очень-очень хороший человек

    Re: использование BlueG mysql plugin R7

    Цитата Сообщение от Fekoz Посмотреть сообщение
    Тригга скажи плиз -
    что лучше из: Р5 или Р6 ?
    Р7(5сим)

  7. #7
    Активный пользователь Аватар для Fekoz
    Регистрация
    02.10.2011
    Адрес
    МОЁ ?
    Возраст
    33
    Сообщений
    1,992
    Репутация: 72

    Звание: скоро придёт к известности

    Re: использование BlueG mysql plugin R7

    Цитата Сообщение от Tracker1 Посмотреть сообщение
    Р7(5сим)
    Разумеется, но из р5 р6 что лучше ?
    Да в р6 при запуске написано mysq r5 connect

  8. #8
    Проверенный Аватар для e.kosovskij
    Регистрация
    09.07.2010
    Адрес
    Украина, Харьков
    Сообщений
    3,180
    Репутация: 308

    Звание: как роза среди колючек

    Re: использование BlueG mysql plugin R7

    +, половину прочитал, пока что вроде понимаю.


    printf("%s зарегистрирован (1 строка с %d столбцами)", name, fields);

    name - пропустил.

  9. #9
    boost::this_thread Аватар для Владокс
    Регистрация
    27.06.2010
    Адрес
    Екатеринбург
    Сообщений
    1,419
    Репутация: 225

    Звание: - весьма и весьма положительная личность

    Re: использование BlueG mysql plugin R7

    годный тутор, но насколько мне помнится кто-то невообразно орал что r7 уг, и что за r6 будущее




    Связь со мной:
    Skype: bjiadokc | ICQ: 5462016 | Mail: [email protected]

    [1:03:15 | Изменены 1:03:25] SDraw: есть идеи блокнуть установщику сцампа доступ к системной папке?
    [1:03:45 | Изменены 1:03:51] SDraw: а то эта падла файлы directx заменяет внаглую
    [1:08:38] Vladislav Barabash: поставь файлы директа в ридонли
    [1:09:14] Vladislav Barabash: chmod r-x d3*.dll

  10. #10
    Активный пользователь Аватар для Twixter
    Регистрация
    28.08.2011
    Сообщений
    888
    Репутация: 103

    Звание: скоро придёт к известности

    Re: использование BlueG mysql plugin R7

    Цитата Сообщение от bjiadokc Посмотреть сообщение
    годный тутор, но насколько мне помнится кто-то невообразно орал что r7 уг, и что за r6 будущее
    я тоже был такого мнения о r7, но теперь считаю иначе
    [INFO] Only a private scripting okay?

Страница 1 из 3 123 ПоследняяПоследняя

Похожие темы

  1. Плагин MySQL R8 От BlueG [2013]
    от KrYpToDeN в разделе Уроки MySQL
    Ответов: 63
    Последнее сообщение: 31.08.2015, 22:12
  2. Многопоточность MySQL R7 от BlueG
    от Fallen A. в разделе Вопросы по скриптингу
    Ответов: 10
    Последнее сообщение: 08.06.2015, 14:40
  3. Вопрос по MySQL r8 от Blueg
    от Dr.Deft в разделе Вопросы по скриптингу
    Ответов: 1
    Последнее сообщение: 11.07.2014, 23:51
  4. MySQL Plugin
    от [SP]Kyle в разделе Вопросы по скриптингу
    Ответов: 6
    Последнее сообщение: 08.10.2013, 15:27
  5. MySQL R8 от Blueg mysql_ping
    от BrianWilson в разделе Вопросы по скриптингу
    Ответов: 2
    Последнее сообщение: 31.07.2013, 18:17

Ваши права

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