PDA

Просмотр полной версии : [Вопрос] перевести код на r41



tester1
03.01.2018, 19:19
Всем привет, помогите пожалуйста перевести данный код на mysql r41 всяко пробовал, но ни как не получается, проблема возникает с циклом, никак не хочет загружать данные из бд..


loadVehicles( playerid )
{

p_vehicles[ playerid ] = 0;

new str[256];
format(str, sizeof(str), "SELECT * FROM `personal_car` WHERE `OWNER` = '%s'", u_name[ playerid ]); // LIMIT 1
new Result:v_result = sql_query(v_db, str, QUERY_CACHED);

if(v_result)
{
new Float: x, Float: y, Float: z, Float: a;
for (new j = 0, rows = sql_num_rows(v_result); j < rows; ++j)
{
j = getFreeSlot();
if( j == MAX_CARS + 1 ) break;
sql_get_field_assoc(v_result, "OWNER", v_system[ j ][ v_owner ]);
v_system[ j ][ v_id ] = sql_get_field_assoc_int(v_result, "VEHICLE_ID");
x = sql_get_field_assoc_float( v_result, "POS_X");
y = sql_get_field_assoc_float( v_result, "POS_Y");
z = sql_get_field_assoc_float( v_result, "POS_Z");
a = sql_get_field_assoc_float( v_result, "POS_A");
v_system[ j ][ v_color ][ 0 ] = sql_get_field_assoc_int(v_result, "COLOR_1");
v_system[ j ][ v_color ][ 1 ] = sql_get_field_assoc_int(v_result, "COLOR_2");
v_system[ j ][ v_paintjob ] = sql_get_field_assoc_int(v_result, "PAINTJOB");
v_system[ j ][ v_car ] = CreateVehicle( v_system[ j ][ v_id ], x, y, z, a, v_system[ j ][ v_color ][ 0 ], v_system[ j ][ v_color ][ 1 ], 999999);
p_vehicles[ playerid ]++;
sql_next_row(v_result);
}
}
sql_free_result(v_result);
}

Elrmrnt-Kritik
03.01.2018, 19:28
LoadVehicles(playerid)
{
p_vehicles[playerid] = 0;
new str[49+(-2+MAX_PLAYER_NAME)+1];
format(str, sizeof(str), "SELECT * FROM `personal_car` WHERE `OWNER` = '%s'", u_name[playerid]);//форматируем запрос
mysql_tquery(v_db, str, "OnLoadVehicles", "i", playerid);//отправляем его и получаем результат в OnLoadVehicles
return true;
}
forward OnLoadVehicles(playerid);
public OnLoadVehicles(playerid)
{
if(!cache_num_rows())//если результата нет, пропускаем код
return true;
new Float:x, Float:y, Float:z, Float:a;
for(new j = cache_num_rows()-1; j != -1; --j)
{
if(j == MAX_CARS+1)
break;
cache_get_value_name(j, "OWNER", v_system[j][v_owner], MAX_PLAYER_NAME);
cache_get_value_name_int(j, "VEHICLE_ID", v_system[j][v_id]);
cache_get_value_name_float(j, "POS_X", x);
cache_get_value_name_float(j, "POS_Y", y);
cache_get_value_name_float(j, "POS_Z", z);
cache_get_value_name_float(j, "POS_A", a);
cache_get_value_name_int(j, "COLOR_1", v_system[j][v_color][0]);
cache_get_value_name_int(j, "COLOR_2", v_system[j][v_color][1]);
cache_get_value_name_int(j, "PAINTJOB", v_system[j][v_paintjob]);
v_system[j][v_car] = CreateVehicle( v_system[ j ][ v_id ], x, y, z, a, v_system[ j ][ v_color ][ 0 ], v_system[ j ][ v_color ][ 1 ], 999999);
p_vehicles[ playerid ]++;
}
return true;
}
Как-то вот так вот.

tester1
04.01.2018, 19:53
А можно ли как нибудь выполнить все в одном паблике, не разбивая на два?

StevenH
04.01.2018, 20:45
А можно ли как нибудь выполнить все в одном паблике, не разбивая на два?

Можно, но зачем тебе это? Что от этого изменится?

tester1
04.01.2018, 20:52
Можно, но зачем тебе это? Что от этого изменится?

Просто у меня много подобных участков кода, и не хотелось бы все разделять, это много времени займет, сам тупо пробовал дабавлять запрос в OnLoadVehicles но почему то ничего не работало, хотелось бы посмотреть, как должно быть..

StevenH
04.01.2018, 23:28
Просто у меня много подобных участков кода, и не хотелось бы все разделять, это много времени займет, сам тупо пробовал дабавлять запрос в OnLoadVehicles но почему то ничего не работало, хотелось бы посмотреть, как должно быть..

В плане производительности, данный вариант который тебе скинули выше, будет быстрее работать. Но если уж так хочется в одном месте, испольуй кэширование (cache)

Kucklovod00
07.01.2018, 15:20
В плане производительности, данный вариант который тебе скинули выше, будет быстрее работать. Но если уж так хочется в одном месте, испольуй кэширование (cache)
Кэширование вроде работает только с однопоточным запросом (query), а в коде выше используется многопоточный.

DeimoS
07.01.2018, 17:36
Кэширование вроде работает только с однопоточным запросом (query), а в коде выше используется многопоточный.

mysql_(t/p)query - это всё кэширование. Разница лишь в принципах обработки запроса плагином и не более.
А StevenH именно про однопоточные запросы и говорил, ибо других вариантов и нет