PDA

Просмотр полной версии : [Вопрос] Cache mysql



Димарио
27.09.2019, 14:48
В самп вики написано что при использовании cache функцй кэш быть должен только активный, что это значит?
Типа должен быть активный запрос к мускулу или что?
Если так, то как он определеят активный он или нет ведь нету никаких переменных которые привязываются к запросам?

И еще такой вопрос, как можно сократить данный код?
Можно ли как то 2 запроса в 1 строке уместить а то чето громоздко

static const fmt_query[] = "INSERT INTO `accounts` (`name`, `pass`) VALUES ('%s', '%s')";
new query[sizeof(fmt_query) + (-2+MAX_PLAYER_NAME) + (-2 + 24)];
format(query, sizeof(query), fmt_query, PlayerInfo[playerid][pName], PlayerInfo[playerid][pPass]);
mysql_query(dbHandle, query);
SendClientMessage(playerid, COLOR_WHITE, "Регистрация персонажа успешно завершена!");
new queery[100];
format(queery, sizeof queery, "SELECT `id` FROM `accounts` WHERE `name` = '%s'", PlayerInfo[playerid][pName]);
mysql_query(dbHandle, queery);
cache_get_value_name_int(0, "id", PlayerInfo[playerid][pID]);
new str[100];
format(str, sizeof str, "Ваш ид: %d", PlayerInfo[playerid][pID]);
SendClientMessage(playerid, -1, str);

DeimoS
27.09.2019, 15:13
Если ты с кэшем работаешь на уровне "отправил запрос - обработал информацию", то для тебя тема активности кэшей не актуальна.
Переключать активные кэши нужно тогда, когда ты, собственно, этот самый кэш сохраняешь через cache_save и уже где-то в другом месте тебе нужно опять обратиться к сохранённому кэшу. Вот тогда и нужно делать его активным при помощи функции cache_set_active. В ситуациях, когда ты просто обрабатываешь результат запроса, кэш и так будет активным.



new query[47 + (MAX_PLAYER_NAME) + (24*2) + 1];
mysql_format(dbHandle, query, sizeof(query), "INSERT INTO accounts SET player_name='%s',pass='%e'",
PlayerInfo[playerid][pName], PlayerInfo[playerid][pPass]);
mysql_query(dbHandle, query);
PlayerInfo[playerid][pID] = cache_insert_id();

SendClientMessage(playerid, COLOR_WHITE, "Регистрация персонажа успешно завершена!");
new str[100];
format(str, sizeof str, "Ваш ид: %d", PlayerInfo[playerid][pID]);
SendClientMessage(playerid, -1, str);

Димарио
27.09.2019, 15:52
Спс а кеш становится активным после отправки любого запроса?

DeimoS
27.09.2019, 16:11
Если запрос подразумевает возврат информации из БД - да.