SQL

Тема в разделе "Программирование / Скриптинг", создана пользователем Someone, 23 май 2016.

  1. Someone

    Someone

    Сообщения:
    136
    Симпатии:
    44
    Как правильно получать/заменять данные в SQL?

    PHP:
    FormatEx(sQuerysizeof(sQuery), "INSERT OR REPLACE INTO Names(steamid, name) VALUES((SELECT steamid FROM Names WHERE steamid = '%s') '%s');"autharg2);                
    SQL_FastQuery(NameDbsQuery);
     
  2. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.975
    Симпатии:
    2.982
    Получение:
    PHP:
    SELECT имя_столбца1имя_столбца2 FROM имя_таблицы WHERE условиенапример имя_столбца3 3
    Изменение:
    PHP:
    UPDATE имя_таблицы SET имя_столбца1 значениеимя_столбца2 значение WHERE условиенапример имя_столбца3 3
    @TheSomeone, или тебя интересует не sql запросы, а код павна?
     
  3. Someone

    Someone

    Сообщения:
    136
    Симпатии:
    44
    А как тогда вставлять или заменять уже имеющиеся данные в дб?
     
  4. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.975
    Симпатии:
    2.982
    PHP:
    INSERT INTO  имя_таблицы (имя_столбца1имя_столбца2VALUES (значение значение )
    или INSERT OR REPLACE INTO а для mysql INSERT INTO + ON DUPLICATE KEY UPDATE
     
  5. Someone

    Someone

    Сообщения:
    136
    Симпатии:
    44
    Все равно не пойму как это сделать...

    У меня плагин, пишу sm_setname [игрок] [новый ник].
    Все работает, но нужно чтобы когда я дважды прописывал sm_setname, игроку менялся ник и заменялась строчка с его steamid, а не добавлялся второй строчкой.

    PHP:
    FormatEx(sQuerysizeof(sQuery), "INSERT OR REPLACE INTO Names(steamid, name) VALUES('%s', '%s') WHERE steamid = '%s';"autharg2auth);                 
    SQL_FastQuery(g_SQLsQuery);
     
  6. Monomizer

    Monomizer Мимо пробегал Супер-модератор

    Сообщения:
    1.528
    Симпатии:
    201
    @TheSomeone, А разве не через "UPDATE таблица SET"
     
  7. Someone

    Someone

    Сообщения:
    136
    Симпатии:
    44
    А через UPDATE можно вносить данные?
     
  8. Monomizer

    Monomizer Мимо пробегал Супер-модератор

    Сообщения:
    1.528
    Симпатии:
    201
    @TheSomeone,
    PHP:
    decl String:query[8192], String:buffer[MAX_STEAMID_LENGTH];
    Format(querysizeof(query), "UPDATE bublick SET %s WHERE steamid = '%s'"querybuffer);
    Но я могу быть сильно не прав и вообще не в тему и это тупо добавление будет...
    Я скорее всего не прав
     
  9. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.975
    Симпатии:
    2.982
    Ну тут либо дебажить запрос который при добавлении будет проверять и заменять либо разделить на 2 запроса:
    1. Поиск игрока в базе
    2. Если есть - update, если нет - insert
     
  10. gibs

    gibs Фитиль народного волненья

    Сообщения:
    536
    Симпатии:
    133
    @R1KO, зачем ты всё это пишешь? Просто линками книгу ему какую-то или уроки. И вообще такие темы следует просто затирать.
    Плюс ко всему тема не в том разделе.
     
  11. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.975
    Симпатии:
    2.982
    @gibs, дак дам ссылку - еще больше вопросов, синтаксис сложнее читать чем готовый пример.
    Хотя и так вопросов тоже много...
     
  12. Someone

    Someone

    Сообщения:
    136
    Симпатии:
    44
    Получать таким образом?

    PHP:
    if(SQL_HasResultSet(hndl) && SQL_FetchRow(hndl))
            {
                
    SQL_FetchString(hndl0namesizeof(name));
            }
              
                
     
  13. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.975
    Симпатии:
    2.982
    @TheSomeone, тебе достаточно if(SQL_HasResultSet(hndl) && SQL_FetchRow(hndl)) просто чтобы знать что игрок есть в базе.
     
  14. Someone

    Someone

    Сообщения:
    136
    Симпатии:
    44
    @R1KO, а как тогда steamid от туда достать?
     
  15. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.975
    Симпатии:
    2.982
    @TheSomeone, передавай его датапаком. хотя можно и из бд выбрать. дай кусок кода.
     
  16. Someone

    Someone

    Сообщения:
    136
    Симпатии:
    44
    PHP:
    public Action:PlayerRename(iClientargs)
    {
        
    decl String:sQuery[256];
        
    decl String:auth[36];
        if (
    args 1)
        {
            
    ReplyToCommand(iClient"[ABp] Используй: sm_setname <#userid|ник> [новый ник]");
            return 
    Plugin_Handled;
        }
       
        
    decl String:arg[MAX_NAME_LENGTH], String:arg2[MAX_NAME_LENGTH];
        
    GetCmdArg(1argsizeof(arg));

        if (
    args 1)
        {
            
    GetCmdArg(2arg2sizeof(arg2));
        }
        
    decl String:target_name[MAX_TARGET_LENGTH];
        
    decl target_list[MAXPLAYERS], target_countbool:tn_is_ml;
       
        if ((
    target_count ProcessTargetString(
                
    arg,
                
    iClient,
                
    target_list,
                
    MAXPLAYERS,
                
    COMMAND_TARGET_NONE,
                
    target_name,
                
    sizeof(target_name),
                
    tn_is_ml)) > 0)
        {
            if (
    tn_is_ml)
            {
                
    ShowActivity(iClient"[SM] ""%t""Renamed target"target_name);
            }
            else
            {
                
    ShowActivity(iClient"[SM] ""%t""Renamed target"target_name);
            }

            if (
    target_count 1)
            {
                
    ReplyToCommand(iClient"[ABp] Нет такого игрока!");
            }

            for (new 
    0target_counti++)
            {
                {
                    
    Format(g_NewName[target_list[i]], MAX_NAME_LENGTH"%s"arg2);
                   
                }
                
    PerformRename(iClienttarget_list[i]);
                
    GetClientAuthId(target_list[i],AuthId_Steam2,auth,sizeof(auth));
                
    FormatEx(sQuerysizeof(sQuery), "INSERT INTO Names(steamid, name) VALUES('%s', '%s');"autharg2auth);                   
                
    SQL_FastQuery(NamesDbsQuery);
            }
        }
        else
        {
            
    ReplyToTargetError(iClienttarget_count);
        }
        return 
    Plugin_Handled;
    }
     
  17. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.975
    Симпатии:
    2.982
    @TheSomeone,
    PHP:
    public Action:PlayerRename(iClientargs)
    {
        
    decl String:auth[36];
        if (
    args 1)
        {
            
    ReplyToCommand(iClient"[ABp] Используй: sm_setname <#userid|ник> [новый ник]");
            return 
    Plugin_Handled;
        }

        
    decl String:arg[MAX_NAME_LENGTH], String:arg2[MAX_NAME_LENGTH];
        
    GetCmdArg(1argsizeof(arg));

        if (
    args 1)
        {
            
    GetCmdArg(2arg2sizeof(arg2));
        }
        
    decl String:target_name[MAX_TARGET_LENGTH];
        
    decl target_list[MAXPLAYERS], target_countbool:tn_is_ml;

        if ((
    target_count ProcessTargetString(
                        
    arg,
                        
    iClient,
                        
    target_list,
                        
    MAXPLAYERS,
                        
    COMMAND_TARGET_NONE,
                        
    target_name,
                        
    sizeof(target_name),
                        
    tn_is_ml)) > 0)
        {
            if (
    tn_is_ml)
            {
                
    ShowActivity(iClient"[SM] ""%t""Renamed target"target_name);
            }
            else
            {
                
    ShowActivity(iClient"[SM] ""%t""Renamed target"target_name);
            }

            if (
    target_count 1)
            {
                
    ReplyToCommand(iClient"[ABp] Нет такого игрока!");
            }

            
    decl iHandle:hDataPackString:sQuery[256];

            for (
    0target_counti++)
            {
                
    strcopy(g_NewName[target_list[i]], MAX_NAME_LENGTHarg2);

                
    PerformRename(iClienttarget_list[i]);

                
    GetClientAuthId(target_list[i],AuthId_Steam2,auth,sizeof(auth));
              
                
    hDataPack CreateDataPack();
                
    WritePackString(hDataPackauth);
                
    WritePackString(hDataPackarg2);

                
    FormatEx(sQuerysizeof(sQuery), "SELECT steamid FROM Names WHERE steamid = '%s';"autharg2auth);                  
                
    SQL_TQuery(NamesDbSQL_Callback_SelectClientsQueryhDataPack);
            }
              
                
    FormatEx(sQuerysizeof(sQuery), "INSERT INTO Names(steamid, name) VALUES('%s', '%s');"autharg2auth);                  
                
    SQL_FastQuery(NamesDbsQuery);
            }
        }
        else
        {
            
    ReplyToTargetError(iClienttarget_count);
        }
        return 
    Plugin_Handled;
    }

    public 
    SQL_Callback_SelectClient(Handle:hOwnerHandle:hQuery, const String:sError[], any:hDataPack)
    {
        if (
    sError[0])
        {
            
    LogError("SQL_Callback_SelectClient: %s"sError);
            
    CloseHandle(hDataPack);
            return;
        }
      
        
    decl String:sQuery[256], String:sName[MAX_NAME_LENGTH*2+1], String:auth[36];

        
    ResetPack(hDataPack);
      
        
    ReadPackString(hDataPackauthsizeof(auth));
        
    ReadPackString(hDataPacksQuerysizeof(sQuery));
        
    SQL_EscapeString(NamesDbsQuerysNamesizeof(sName));
      
        
    CloseHandle(hDataPack);

        if (
    SQL_FetchRow(hQuery))
        {
            
    FormatEx(sQuerysizeof(sQuery), "UPDATE `Names` SET `name` = '%s' WHERE `steamid` = '%s';"sNameauth);
        }
        else
        {
            
    FormatEx(sQuerysizeof(sQuery), "INSERT INTO Names (steamid, name) VALUES ('%s', '%s');"authsName);  
        }
      
        
    SQL_TQuery(NamesDbSQL_Callback_ErrorChecksQuery);
    }

    public 
    SQL_Callback_ErrorCheck(Handle:hOwnerHandle:hQuery, const String:sError[], any:data)
    {
        if (
    sError[0])
        {
            
    LogError("SQL_Callback_ErrorCheck: %s"sError);
        }
    }
     
    Последнее редактирование: 24 май 2016
  18. Someone

    Someone

    Сообщения:
    136
    Симпатии:
    44
    @R1KO, спасибо, работает.

    Только в WritePackString пропустил hDataPack.

    [​IMG]
     
  19. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.975
    Симпатии:
    2.982
    @TheSomeone, невнимательность и спешка.