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

    Статус
    Оффлайн
    Регистрация
    28.05.2017
    Адрес
    Россия, Курган
    Сообщений
    3
    Репутация:
    0 ±

    Как правильно реализовать загрузку и создание организации.

    Всем доброго времени суток. В данный момент пишу систему организаций, и в процессе реализации динамического создания организаций, возникла проблема. Прям никак не могу додуматься как такое сделать, раньше делал такое, но сейчас не могу вспомнить ничего.

    Я хочу реализовать вот что:
    К примеру в базе данных у меня 2 организации с ID 0 и 3, и когда я создам еще 4 организации, они займут ID 1, 2, 4, 5 (в базе данных и в коде).
    Но при создании у них получается ID 2, 3, 4, 5.

    Знаю что делаю что - то не так, но понять что - не могу

    Вот диалог с созданием:
    PHP код:
    case Dialog_Create:
            {
                  if(!
    response) return 1;
                  switch(
    listitem)
                  {
                      case 
    0:
                      {
                        for(new 
    0sizeof(Organization_Info); i++)
                        {
                            if(
    Organization_Info[i][Organization_Created] == true) continue;
                            
    Organization_Info[i][Organization_ID] = i;
                            
    strmid(Organization_Info[i][Organization_Name], "No Name"0strlen("No Name"), 64);

                            static const 
    format_query_string[] = "INSERT INTO `organizations` (`Organization_ID`, `Organization_Name`) VALUES ('%d', '%s')";
                            new 
    query_string[sizeof(format_query_string) + (- 11) + (- 64)];
                            
    format(query_stringsizeof(query_string), format_query_stringOrganization_Info[i][Organization_ID], Organization_Info[i][Organization_Name]);
                            
    mysql_tquery(mysql_connect_idquery_string"""");
                            
                            static const 
    format_string[] = "Вы создали организацию под ID '%d'\n\
                            Для редактирования организации используйте команду '/edit'"
    ;
                            new 
    string[sizeof(format_string) + (- 11)];
                            
    format(stringsizeof(string), format_stringOrganization_Info[i][Organization_ID]);
                            
    SendClientMessage(playerid, -1string);
                            
                            
    Organization_Info[i][Organization_Created] = true;
                            break;
                        }
                      }
                  }
            } 
    А вот загрузка:
    PHP код:
    forward Load_Organizations();                                                   
    public 
    Load_Organizations()
    {
        new 
    rows;
        
    cache_get_row_count(rows);
        if(
    rows)
        {
            for(new 
    0rowsi++)
            {
                
    cache_get_value_name_int(i"Organization_ID"Organization_Info[i][Organization_ID]);
                
    cache_get_value_name(i"Organization_Name"Organization_Info[i][Organization_Name], 64);
                
    Organization_Info[i][Organization_Created] = true;
            }
            print(
    "[Загрузка организаций] Все организации загружены.");
        }
        else print(
    "[Загрузка организаций] В базе данных организации не найдены.");
        return 
    1;

    В итоге должно было получится вот что:
    Переменная Organization_ID у организации в моде должна быть равна полю Organization_ID в базе данных, всегда так.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Советую создать ещё один столбец, назвав его, например, row_id и уже его сделать уникальным ключом, установив ему значение AUTO_INCREMET. А уже Organization_ID регулировать самостоятельно.

    Сама система довольно странно реализована. При загрузке у тебя ID из таблицы никак не влияет на номер ячейки, в которую загружаются данные, а уже в диалоге ты почему-то обрабатываешь данные исходя из номера итерации.
    Я бы вообще советовал создать новый итератор при помощи функционала foreach и уже ему позволить контролировать ID. Ну а без всего этого проблема твоя решается как-то так:

    PHP код:
    forward Load_Organizations();                                                   public Load_Organizations()
    {
        new 
    rows;
        
    cache_get_row_count(rows);
        if(
    rows)
        {
            for(new 
    0idxrowsi++)
            {
                
    cache_get_value_name_int(i"Organization_ID"idx);
                
    Organization_Info[idx][Organization_ID] = idx;
                
    cache_get_value_name(i"Organization_Name"Organization_Info[idx][Organization_Name], 64);
                
    Organization_Info[idx][Organization_Created] = true;
            }
            print(
    "[Загрузка организаций] Все организации загружены.");
        }
        else print(
    "[Загрузка организаций] В базе данных организации не найдены.");
        return 
    1;

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

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

    Steve Pavlina

  3. Пользователь сказал cпасибо:
    Egor Koltyshev (28.05.2017)
 

 

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

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

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

Ваши права

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