А, то есть, один раз отправить запрос и после работать с выгруженными данными гемморнее, чем постоянно форматировать и отсылать в базу новый запрос, всё так же выгружая данные и так же работая с кэшем, что и в первом варианте? Тот, кто тебе это посоветовал, явно знает как жить (нет).
Иными словами, в варианте с LIMIT ты лишь добавишь дополнительную отправку запроса в базу, тратя на это процессорное время и усложнив код в несколько раз. Весь остальной код у тебя будет практически таким же, за исключением отсутствия удаления кэша (но отчищать переменные при закрытии диалога всё так же придётся, а так же придётся как-то определять какую именно строку выбрал игрок, соотнося её с данными в таблице).
В общем, твой советчик - Григорий Остер от мира программирования :)
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
Спасибо за пояснение)
UPD, по теме.
Вообщем, я по пробовал работать с индексом.
По страницам бегаю отлично, но, беда в том, что после первого ввода команды, выходит ошибка с нет активного кэша.
И сам диалог:PHP код:
new string[78 + MAX_PLAYER_NAME + 50];
format(string, sizeof(string), "SELECT * FROM `"TABLES"` WHERE BINARY `nickname`='%s' AND `dates`='%s' ORDER BY `mysql_id` DESC;",names_player,dates3);
mysql_function_query(m_connect, string, true, "OnLoadCallBack", "d",playerid);
forward OnLoadCallBack(playerid);
public OnLoadCallBack(playerid)// Пришёл ответ из самого стока
{
new rows = cache_get_row_count(m_connect);
if(rows == 0) return SCMError(playerid,"[Log Info]: {FFFFFF}Логов не найдено.");
if(GetPVarInt(playerid,"ID_Test") == 1)
{
DeletePVar(playerid,"_NickName");
DeletePVar(playerid,"ID_Test");
cache_delete(Cache:CacheID_List[playerid],m_connect);
PageCount_List[playerid] = _:CacheID_List[playerid] = -1;
}
CacheID_List[playerid] = cache_save(m_connect);
PageID_List[playerid] = 0;
PageCount_List[playerid] = rows;
SetPVarInt(playerid,"ID_Test",1);
Show_PlayerListID(playerid);
return 1;
}
stock Show_PlayerListID(playerid)
{
if(CacheID_List[playerid] == Cache:-1) return SCMError(playerid, "[Server]: {FFFFFF}Нет активного кэша с информацией");
cache_set_active(CacheID_List[playerid],m_connect);
static dialog_string[750];
dialog_string[0] = EOS;
new load_p_act[30],rows,i,load_name[MAX_PLAYER_NAME],load_mysql_dd;
i = PageID_List[playerid]*20;
rows = i+20;
if(rows > PageCount_List[playerid]) rows = PageCount_List[playerid];
for(; i < rows; i++)
{
load_mysql_dd = cache_get_field_content_int(i, "mysql_id",m_connect);
cache_get_field_content(i, "nickname", load_name,m_connect,MAX_PLAYER_NAME);
cache_get_field_content(i, "p_act", load_p_act,m_connect,30);
format(dialog_string, sizeof(dialog_string), "%s[%d] | %s\n", dialog_string,load_mysql_dd, load_p_act);
}
if(PageCount_List[playerid] > MAX_ROWS_LIST && rows != PageCount_List[playerid]) strcat(dialog_string, "Далее\n");
if(PageID_List[playerid] != 0) strcat(dialog_string, "Назад");
new str[27];
format(str,sizeof(str),""COLOR_SERVER"%s",load_name);
SPD(playerid, dID_A_Panel_Logs, DIALOG_STYLE_LIST, str, dialog_string, "Выбор", "Отмена");
SetPVarString(playerid,"log_NickName",load_name);
return 1;
}
Ошибка:PHP код:
stock Show_InPlayer(playerid,listitem)
{
new idx = PageID_List[playerid]*PageCount_List[playerid]+listitem;
printf("idx: %d",idx);
new test_0[30],test_1[30],test_2[30],test_3[30];
new load_name[MAX_PLAYER_NAME];
cache_get_field_content(idx,"test_1",test_0,Mysql_Log,30);
cache_get_field_content(idx,"test_2",test_1,Mysql_Log,30);
cache_get_field_content(idx,"test_3",test_2,Mysql_Log,30);
cache_get_field_content(idx,"test_4",test_3,Mysql_Log,30);
//=========//
GetPVarString(playerid,"_NickName",load_name,MAX_PLAYER_NAME);
new str_r[400];
format(str_r,sizeof(str_r),"%s\n%s\n%s\%s",load_name,test_0,test_1,test_2,test_3);
SPD(playerid, dID_Dialog, DIALOG_STYLE_MSGBOX, "Info", str_r, "Ок","Назад");
return 1;
}
Я так понимаю, что жалуется на загрузку данных из стока, НО, вот вопрос, если idx совпадает, и всё как бы нормально должно быть, почему же ошибка?PHP код:
[07:31:28 08/30/19] [WARNING] cache_get_field_content - no active cache
[07:31:28 08/30/19] [WARNING] cache_get_field_content - no active cache
[07:31:28 08/30/19] [WARNING] cache_get_field_content - no active cache
[07:31:28 08/30/19] [WARNING] cache_get_field_content - no active cache
Она появляется именно тогда, когда кэша в принципе и не может быть, жмем в диалоге кнопку назад, и снова нажимаем на 1 наименование из списка, и вуаля, всё нормально работает, закрываем диалог, открываем снова, и снова ошибка с загрузкой данных....
Последний раз редактировалось Сергей; 30.08.2019 в 09:48.
cache_set_active используй при всяком обращении к сохранённому кэшу. Стоит отправить какой-то другой запрос в БД и плагин сразу переключается с твоего сохранённого кэша, из-за чего ошибка и появляется.
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
Хорошо, добавляем cache_set_active в сток с показом инфы, вводим команду, нажимаем на 1 из пунктов в диалоге, инфа появляется, пробуем повторить комбинацию ещё несколько раз, работает, НО, на 4-тый раз уже всё не так, на 5-тый раз уже всё ломается, непонятно почему...
Ошибка:
PHP код:
[15:47:55 08/30/19] [ERROR] CMySQLResult::GetRowDataByName() - invalid row index ('42') (Query: "SELECT * FROM `accounts` WHERE BINARY `nickname`='Names' AND `dates`='28/08/2019' ORDER BY `mysql_id` DESC;")
[15:47:55 08/30/19] [ERROR] CMySQLResult::GetRowDataByName() - invalid row index ('42') (Query: "SELECT * FROM `accounts` WHERE BINARY `nickname`='Names' AND `dates`='28/08/2019' ORDER BY `mysql_id` DESC;")
[15:47:55 08/30/19] [ERROR] CMySQLResult::GetRowDataByName() - invalid row index ('42') (Query: "SELECT * FROM `accounts` WHERE BINARY `nickname`='Names' AND `dates`='28/08/2019' ORDER BY `mysql_id` DESC;")
[15:47:55 08/30/19] [ERROR] CMySQLResult::GetRowDataByName() - invalid row index ('42') (Query: "SELECT * FROM `accounts` WHERE BINARY `nickname`='Names' AND `dates`='28/08/2019' ORDER BY `mysql_id` DESC;")
Последний раз редактировалось Сергей; 30.08.2019 в 18:13.
Эмм, а это тот запрос, с которым ты работаешь изначально? Если нет, то не везде проставил cache_set_active
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
Если это изначальный запрос, значит проблема в формуле, по которой определяешь индекс строки. Ну той, которая
Логируй все переменные."номер_страницы*максимальное_число_строк_на_странице+listitem"
Система, на самом деле, крайне простая. Главное раз вникнуть и понять принципы её работы. Там всё работает на нескольких переменных и, при этом, нет никаких лимитов на количество данных, которые возвращаются из базы.
Последний раз редактировалось DeimoS; 30.08.2019 в 23:35.
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)