[MySQL R39-3] Как перевести систему исп. ORM?
#1

Здраствуйте, я использую MySQL R39-3 и прочитав тему про ORM я решил всё систему моего мода переделать под ORM
PHP код:
enum admins
{
ORMLvl//ЛВЛ админки
Nick,
ORMReport,// О
ORMKick// Киков
ORMJail// Игроков посаженно в тюрьму
ORMMute// Выдано мутов
ORMTime// Время онлайн
ORMVigovor// Выговор
ORMReasons1// Предупреждения...
ORMReasons2,
ORMReasons3,
Skype // Skype Админа

PHP код:
OnPlayerDisconnect
if(pStats[playerid][pAdmin] > 0)
    {
        
format(querysizeof(query), "UPDATE "TABLE_ADMINS" SET Report = '%i',Kick = '%i',Jail = '%i', Mute = '%i', Time = '%i', Vigovor = '%i' WHERE `Nick` = '%s'",astats[0][playerid],astats[1][playerid],astats[2][playerid],astats[3][playerid],astats[4][playerid],pStats[playerid][pVigovor],pStats[playerid][pName]);
        
mysql_query(query);
          if(
pStats[playerid][pAdmin] < 7)
          {
           new 
adminoff[128];
           
format(adminoff128"[A] %s[%d] вышел из игры",pStats[playerid][pName],playerid);
           
SendAdminMessage(COLOR_GREYadminoff);
        }
    } 
Команда
PHP код:
CMD:delacc(playerid,params[])
{
    if(
GetPVarInt(playerid,"dellac") > gettime())return SendClientMessage(playerid,COLOR_GREY,"Удалять аккаунты можно раз в 120 секунд.");
    if(
pStats[playerid][pAdmin] < 7|| DostupAdmin[playerid] == false) return true;
    new 
deletenick[MAX_PLAYER_NAME], aid;
    if(
sscanf(params,"s[24]",deletenick)) return SCM(playeridCOLOR_WHITE"Введите: /delacc [ник]");
    
sscanf(deletenick,"u",aid);
    if(
IsPlayerConnected(aid)) return SCM(playeridCOLOR_WHITE,"Ошибка: Данный игрок в сети. Введите /skick");
    if(
strcmp(deletenick"Johhny"true) == 0) return 0;
    
addlog(playerid,playerid,"/delacc",0,5);
    
format(querysizeof(query), "DELETE FROM `users` WHERE `Nick` = '%s'"deletenick);
       
mysql_query(query);
       
format(querysizeof(query), "DELETE FROM `admins` WHERE `Nick` = '%s'"deletenick);
       
mysql_query(query);
       
format(nsa,sizeof(nsa),"[A] %s[%d] удалил аккаунт игрока %s",pStats[playerid][pName],playeriddeletenick);
       
SendAdminMessage(0xFF0000FFnsa);
       
SetPVarInt(playerid,"dellac",gettime()+120);
    return 
1;

и т.д
Я не прошу всё сделать за меня или чтото типа этого. Мне лишь надо пример как использовать ORM.
Напишите для примера как использовать ORM для этой строки:
PHP код:
 format(querysizeof(query), "UPDATE "TABLE_ADMINS" SET Report = '%i',Kick = '%i',Jail = '%i', Mute = '%i', Time = '%i', Vigovor = '%i' WHERE `Nick` = '%s'",astats[0][playerid],astats[1][playerid],astats[2][playerid],astats[3][playerid],astats[4][playerid],pStats[playerid][pVigovor],pStats[playerid][pName]); 
Reply
#2

https://sampforum.blast.hk/showthread.php?tid=461766
Reply
#3

'ORM:' — это ID созданного сценария, зачем ты ко всем int добавил его?
В ORM нет форматных запросов, там такие запросы:
orm_select
orm_insert
orm_delete

P.S. Судя по тому, что в enum у тебя даже 'Nick' как int, то лучше посмотри чужие работы. Поучись, чем сразу делать что-то.
Reply
#4

Quote:
Originally Posted by TN0
Посмотреть сообщение
'ORM:' — это ID созданного сценария, зачем ты ко всем int добавил его?
В ORM нет форматных запросов, там такие запросы:
orm_select
orm_insert
orm_delete

P.S. Судя по тому, что в enum у тебя даже 'Nick' как int, то лучше посмотри чужие работы. Поучись, чем сразу делать что-то.
Это был лишь пример. Про 'Nick' я знаю что для него нужно использовать Varchar(24
Я лишь хотел оптимизировать эту систему.
Используя ORM функций.
Reply
#5

Не зная азов, хотел оптимизировать. Писец.
"Не умею даже молоток в руках держать, дайте мне экскаватор, пойду его в канаве утоплю."
Reply
#6

Quote:
Originally Posted by Johhnyllll
Посмотреть сообщение
Это был лишь пример. Про 'Nick' я знаю что для него нужно использовать Varchar(24)(Спасибо моему учителю e.G.)
Я лишь хотел оптимизировать эту систему.
Используя ORM функций.
Можете ударить своего учителя палкой!
MySQL и ему подобные БД всегда регистрируют под Varchar 256 ячеек, в не зависимости о того сколько вы указали, так что длину меньше 255 можно не указывать, так чисто для себя успокоение.
Reply
#7

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
Можете ударить своего учителя палкой!
MySQL и ему подобные БД всегда регистрируют под Varchar 256 ячеек, в не зависимости о того сколько вы указали, так что длину меньше 255 можно не указывать, так чисто для себя успокоение.
Ну он так мне и сказал. Я использую 24. Думаю это приемлимо

Quote:
Originally Posted by eakwarp
Посмотреть сообщение
Не зная азов, хотел оптимизировать. Писец.
"Не умею даже молоток в руках держать, дайте мне экскаватор, пойду его в канаве утоплю."
Просим не оффтопить. Я тут оброщаюсь за помощью и совета, но не для того чтоб мне доказали какой я тупой на фоне других людей.
Reply
#8

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
Можете ударить своего учителя палкой!
MySQL и ему подобные БД всегда регистрируют под Varchar 256 ячеек, в не зависимости о того сколько вы указали, так что длину меньше 255 можно не указывать, так чисто для себя успокоение.
Ну если знаешь к примеру что больше 24 ячейки юзаются, а 221 нет... Зачем тогда делать на 255?
Или... Объясни пожалуйста.
Reply
#9

Кстати. Что хотел ещё по ORM написать создателю темы. Если хочешь оптимизировать, то не используй ORM. Слышал, что он проще в использовании, но в скорости хуже обычных запросов.
Reply
#10

Quote:
Originally Posted by TN0
Посмотреть сообщение
Ну если знаешь к примеру что больше 24 ячейки юзаются, а 221 нет... Зачем тогда делать на 255?
Или... Объясни пожалуйста.
А теперь по русски пожалуйста?
Reply
#11

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
А теперь по русски пожалуйста?
Ну в смысле. 255 ячеек смысл использовать, если из них к примеру будет использоваться всего 24.
Reply
#12

Quote:
Originally Posted by TN0
Посмотреть сообщение
Ну в смысле. 255 ячеек смысл использовать, если из них к примеру будет использоваться всего 24.
VARCHAR работает несколько по другому. Он всегда выделяет требуемое количество ячеек от 1 до 255 + 1 байт отдает на указание длинны.
Например
"12345" - всегда, вне зависимсоти от указания размера варчара займет 6 байт.
"123" - займет 4.
"1" - займет два.

Конкретную цифру стоит использовать только в CHAR, вот там всегда выделяется столько сколько указано.
Reply
#13

Степашка че-то напутал
Reply
#14

Quote:
Originally Posted by stabker
Посмотреть сообщение
Степашка че-то напутал
Могу с уверенностью сказать что это вы недопоняли.
Reply
#15

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
Могу с уверенностью сказать что это вы недопоняли.
Может быть.

http://phpclub.ru/mysql/doc/char.html

Если я делаю VARCHAR(24), то как минимум это удобно потому, что больше 24х символов туда не впишу. Если меньше, то соответственно меньше памяти затрачено будет. Что не так понял?
Reply
#16

Quote:
Originally Posted by stabker
Посмотреть сообщение
Может быть.

http://phpclub.ru/mysql/doc/char.html

Если я делаю VARCHAR(24), то как минимум это удобно потому, что больше 24х символов туда не впишу. Если меньше, то соответственно меньше памяти затрачено будет. Что не так понял?
Это единственное в чем это удобно, когда нужно железобетонно ограничить длинну, и убрать лишние пробелы в конце.
Reply
#17

Quote:
Originally Posted by eakwarp
Посмотреть сообщение
Это единственное в чем это удобно, когда нужно железобетонно ограничить длинну, и убрать лишние пробелы в конце.
Ну, а что еще нужно-то? Также пробелами не заполняется. По крайней мере, я нахожу более логичным писать 24, вместо 255, когда мне нужно 24.

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
MySQL и ему подобные БД всегда регистрируют под Varchar 256 ячеек, в не зависимости о того сколько вы указали, так что длину меньше 255 можно не указывать, так чисто для себя успокоение.
Reply
#18

Quote:
Originally Posted by stabker
Посмотреть сообщение
Может быть.

http://phpclub.ru/mysql/doc/char.html

Если я делаю VARCHAR(24), то как минимум это удобно потому, что больше 24х символов туда не впишу. Если меньше, то соответственно меньше памяти затрачено будет. Что не так понял?
Про символы все верно, про память нет, памяти всегда выделяется на 256 символов, вне зависимости от того сколько вы там указали.
Делается это для того что бы в будущем не было проблем если вы вдруг захотите увеличить длину. Что-то типа "Смотрите, а мы уже и память под это выделили, вот какие мы заботливые".
Reply
#19

Спасибо всё что было тут написано мне поможет в будущем.
Я сделал по другому
PHP код:
enum E_ADMIN_DATA
{
    
ORM_ps_ormid,
    
// mysql synced
    
Lvl,
    
Nick,
    
Report,
    
Kicks,
    
Jail,
    
Mute,
    
Time,
    
Vigovor,
    
Reason1,
    
Reason2,
    
Reason3,
    
Skype
}
new 
PS[MAX_PLAYERS][E_ADMIN_DATA]; 
PHP код:
В он GameModeInit
mysql_tquery
(1"SELECT * FROM `admins`""OnMySQL_Admins"); 
Команда:
PHP код:
CMD:acheck(playerid,params[])
{
    if(
pInfo[playerid][p_access] < 1) return true;
    if(
sscanf(params,"s[24]",params[0])) return SendClientMessage(playeridCOLOR_WHITE"Введите: /acheck [ник]");
     if(
IsPlayerConnected(params[0]))
     {
         if(
pInfo[playerid][p_access] < 1) return SendClientMessage(playerid,-1,"Данный игрок не администратор");
         new 
sctring[1500],str[250];
         
format(str,sizeof(str),"{FFFFFF}Имя Администратора: {1e90ff}%s\n\n",Name(params[0])); strcat(sctring,str);
          
format(str,sizeof(str),"{FFFFFF}Уровень Администратора: {FF9900}%d\n",pInfo[params[0]][p_access]); strcat(sctring,str);
          
format(str,sizeof(str),"{FFFFFF}Ответил на репорт: {FF9900}%d\n",astats[0][params[0]]); strcat(sctring,str);
          
format(str,sizeof(str),"{FFFFFF}Кикнул людей: {FF9900}%d\n",astats[1][params[0]]); strcat(sctring,str);
          
format(str,sizeof(str),"{FFFFFF}Посадил в тюрьму: {FF9900}%d\n",astats[2][params[0]]); strcat(sctring,str);
          
format(str,sizeof(str),"{FFFFFF}Выдал молчанку: {FF9900}%d\n",astats[3][params[0]]); strcat(sctring,str);
          
format(str,sizeof(str),"{FFFFFF}Skype: {FF9900}%s\n",PS[params[0]][Skype]); strcat(sctring,str);
          
format(str,sizeof(str),"{FFFFFF}Время на сервере: {FF9900}%s\n\n",ConvertMsToTime(astats[4][params[0]])); strcat(sctring,str);
          
//format(str,sizeof(str),"{FFFFFF}Онлайн за сегодня: {FF9900}%s\n\n",ConvertMsToTime(pInfo[playerid][pOnline])); strcat(sctring,str);
          
if(PS[params[0]][Vigovor]>=1){ format(str,sizeof(str),"{FFFFFF}Причина выговора: {FF9900}%s\n",PS[params[0]][Reason1]); strcat(sctring,str);}
        if(
PS[params[0]][Vigovor]>=2){ format(str,sizeof(str),"{FFFFFF}Причина выговора: {FF9900}%s\n",PS[params[0]][Reason2]); strcat(sctring,str);}
        if(
PS[params[0]][Vigovor]>=3){ format(str,sizeof(str),"{FFFFFF}Причина выговора: {FF9900}%s\n",PS[params[0]][Reason3]); strcat(sctring,str);}
          
ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX ,"{FF9900}Статистика",sctring,"Закрыть","");
          return 
true;
    }
    else 
OnMySQL_Admins();
     return 
true;

PHP код:
forward OnMySQL_Admins();
public 
OnMySQL_Admins()
{
    new 
str[64],params[7],stringinfo[900], sctring[1000],query[1024];
    new 
time GetTickCount();
    for(new 
xsizeof(PS); x++)
    {
        
PS[x][_ps_ormid] = orm_create("admins");
        
orm_addvar_int(PS[x][_ps_ormid], PS[x][Lvl], "Lvl");
        
orm_addvar_string(PS[x][_ps_ormid], PS[x][Nick],MAX_PLAYERS"Nick");
        
orm_addvar_int(PS[x][_ps_ormid], PS[x][Report], "Report");
        
orm_addvar_int(PS[x][_ps_ormid], PS[x][Kicks], "Kick");
        
orm_addvar_int(PS[x][_ps_ormid], PS[x][Jail], "Jail");
           
orm_addvar_int(PS[x][_ps_ormid], PS[x][Mute], "Mute");
           
orm_addvar_string(PS[x][_ps_ormid], PS[x][Time],MAX_PLAYERS"Time");
        
orm_addvar_int(PS[x][_ps_ormid], PS[x][Vigovor], "Vigovor");
           
orm_addvar_string(PS[x][_ps_ormid], PS[x][Reason1],MAX_PLAYERS"Reason1");
           
orm_addvar_string(PS[x][_ps_ormid], PS[x][Reason2],MAX_PLAYERS"Reason2");
           
orm_addvar_string(PS[x][_ps_ormid], PS[x][Reason3],MAX_PLAYERS"Reason3");
        
orm_addvar_string(PS[x][_ps_ormid], PS[x][Skype],MAX_PLAYERS"Skype");
        
format(str64"{FFFFFF}Имя Администратора: {1e90ff}%s\n\n",Name(params[0])); strcat(stringinfo,str);
        
format(str64"{FFFFFF}Уровень Администратора: {FF9900}%d\n",params[0]); strcat(stringinfo,str);
        
format(str64"{FFFFFF}Ответил на репорт: {FF9900}%d\n",params[1]); strcat(stringinfo,str);
           
format(str64"{FFFFFF}Кикнул людей: {FF9900}%d\n",params[2]); strcat(stringinfo,str);
           
format(str64"{FFFFFF}Посадил в тюрьму: {FF9900}%d\n",params[3]); strcat(stringinfo,str);
          
format(str64"{FFFFFF}Выдал молчанку: {FF9900}%d\n",params[4]); strcat(stringinfo,str);
           
format(str64"{FFFFFF}Skype: {FF9900}%s\n",Skype); strcat(stringinfo,str);
        
format(str64"{FFFFFF}Время на сервере: {FF9900}%s\n\n",ConvertMsToTime(params[5])); strcat(stringinfo,str);
        if(
PS[params[0]][Vigovor]>=1){ format(str,sizeof(str),"{FFFFFF}Причина выговора: {FF9900}%s\n",PS[params[0]][Reason1]); strcat(sctring,str);}
        if(
PS[params[0]][Vigovor]>=2){ format(str,sizeof(str),"{FFFFFF}Причина выговора: {FF9900}%s\n",PS[params[0]][Reason2]); strcat(sctring,str);}
        if(
PS[params[0]][Vigovor]>=3){ format(str,sizeof(str),"{FFFFFF}Причина выговора: {FF9900}%s\n",PS[params[0]][Reason3]); strcat(sctring,str);}
        
orm_apply_cache(PS[x][_ps_ormid], x);
    }
    
printf("[Admin System] Админ Систем загружено | Время: %d (ms)",GetTickCount()-time);
    return 
true;

Но только теперь всё компилиться но если нужно узнать данные администратора нечего не работает
Reply
#20

Потому что у ORM другие запросы. Ты должен написать сценарий и работать уже с ID сценария.

P.S. Хотя сейчас посмотрел, вроде всё добавил. orm_setkey только не вижу. ID в базу данных записываешь?

P.S.S. Сделал полный бред в загрузке, зачем-то format сделал который нигде не используется.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)