Помощь по MySQL
#1

создам отдельную тему, так как вопросов накопилось море и они не мелкие. буду задавать по очереди, мб кто то не запнеться на моих ошибках
http://s55.radikal.ru/i147/1005/f7/e5c9653ed6f0.jpg

почему так хреново пишется?

я хочу записать сколько игрок убивает с определенного оружия.
Code:
	format(query,SQL_CHECKER_SIZE,"UPDATE `"kWeaponTableName"` SET `0` = '%d',`1` = '%d',`2` = '%d',`3` = '%d',`4` = '%d',`5` = '%d',`6` = '%d',`7` = '%d',`8` = '%d',`9` = '%d',`10` = '%d',`11` = '%d',`12` = '%d' WHERE (`pName` = '%s')",
	iM[p][0],iM[p][1],iM[p][2],iM[p][3],iM[p][4],iM[p][5],iM[p][6],iM[p][7],iM[p][8],iM[p][9],iM[p][10],iM[p][11],iM[p][12],myNick[p]);
	mysql_query(query);
	format(query,SQL_CHECKER_SIZE,"UPDATE `"kWeaponTableName"` SET `13` = '%d',`14` = '%d',`15` = '%d',`16` = '%d',`17` = '%d',`18` = '%d',`19` = '%d',`20` = '%d',`21` = '%d',`22` = '%d',`23` = '%d',`24` = '%d',`25` = '%d' WHERE (`pName` = '%s')",
	iM[p][13],iM[p][14],iM[p][15],iM[p][16],iM[p][17],iM[p][18],iM[p][19],iM[p][20],iM[p][21],iM[p][22],iM[p][23],iM[p][24],iM[p][25],myNick[p]);
	mysql_query(query);
	format(query,SQL_CHECKER_SIZE,"UPDATE `"kWeaponTableName"` SET `26` = '%d',`27` = '%d',`28` = '%d',`29` = '%d',`30` = '%d',`31` = '%d',`32` = '%d',`33` = '%d',`34` = '%d',`35` = '%d',`36` = '%d',`37` = '%d',`38` = '%d' WHERE (`pName` = '%s')",
	iM[p][26],iM[p][27],iM[p][28],iM[p][29],iM[p][30],iM[p][31],iM[p][32],iM[p][33],iM[p][34],iM[p][35],iM[p][36],iM[p][37],iM[p][38],myNick[p]);
	mysql_query(query);
	format(query,SQL_CHECKER_SIZE,"UPDATE `"kWeaponTableName"` SET `39` = '%d',`40` = '%d',`41` = '%d',`42` = '%d',`43` = '%d',`44` = '%d',`45` = '%d',`46` = '%d' WHERE (`pName` = '%s')",
	iM[p][39],iM[p][40],iM[p][41],iM[p][42],iM[p][43],iM[p][44],iM[p][45],iM[p][46],myNick[p]);
как проводиться запись в переменную?

Code:
forward OnPlayerAmmoChange(playerid, newammo, oldammo);
public OnPlayerAmmoChange(playerid, newammo, oldammo)
{
	if(newammo == 0) { PlayerWeapons[playerid][GetPlayerWeapon(playerid)] = 0; }
	  iM[playerid][iNewPlayerWeapon[playerid]] += oldammo-newammo;
	return 1;
}
при дисконнекте переменная обнуляеться.



расскажите чо да как, а?
Reply
#2

А что именно на картинке хренового? отрицательные числа? или там вообще все неверно? какого типа все эти поля?

и зачем так усложнять себе жизнь, ведь можно было и проще

pawn Code:
query = "";
for (new i = 0; i <= 46; i++)
{
    format(query, SQL_CHECKER_SIZE, "`%d` = %d %s", i, iM[p][i], query);
}
format(query, SQL_CHECKER_SIZE, "UPDATE `"kWeaponTableName"` SET %s WHERE (`pName` = '%s')`", query, myNick[p]);
mysql_query(query);
Reply
#3

Quote:

WHERE (`pName` = '%s')

тут лучше использовать числовой параметр как главный, а не строку, так как если будет дофига юзеров в бд, будут лаги...
Reply
#4

всё неверно ((

тип полей числовой.

ЗЫ этот код без strcat нормально работать не будет.

и ещё, верно ли я читаю статистику? а то нету возможности протестировать сейчас.
первый раз работаю с большими данными, одиночные всё ок.

Code:
	new query[SQL_CHECKER_SIZE],string[64],fetchint[64];
	// Killed Weapon
	format(query,SQL_CHECKER_SIZE,"SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,40,41,42,43,44,45,46,0 FROM `"kWeaponTableName"` WHERE `pName` = '%s'",myNick[playerid]);
  mysql_query(query);
	mysql_store_result();
	for(new i = 1; i < 46; i++)
	{
	  format(string,64,"%d",i);
	  mysql_fetch_field(string,fetchint);
	  KW[playerid][i] = strval(fetchint);
	  format(fetchint,64," ");
	}
  mysql_free_result();
	// Lovely Weapon
	format(query,SQL_CHECKER_SIZE,"SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,40,41,42,43,44,45,46,0 FROM `"WeaponTableName"` WHERE `pName` = '%s'",myNick[playerid]);
  mysql_query(query);
	mysql_store_result();
	for(new i = 0; i < 46; i++)
	{
	  format(string,64,"%d",i);
	  mysql_fetch_field(string,fetchint);
	  LW[playerid][i] = strval(fetchint);
	  format(fetchint,64," ");
	}
  mysql_free_result();
Quote:

тут лучше использовать числовой параметр как главный, а не строку, так как если будет дофига юзеров в бд, будут лаги...

будь добр, перефразируй. нифига не понял (
Reply
#5

Quote:
Originally Posted by ^Psy
pawn Code:
if(mysql_fetch_row_data())
{
mysql_fetch_field(string,fetchint);
}
По идеи так надо это использовать, но эта хрень работает как-то через раз, лучше использовать mysql_fetch_row и через split или sscanf записывать все.
Quote:
Originally Posted by ^Psy
Quote:

тут лучше использовать числовой параметр как главный, а не строку, так как если будет дофига юзеров в бд, будут лаги...

будь добр, перефразируй. нифига не понял (
То есть использовать
pawn Code:
WHERE (`id` = '%d') // Уникальный ид
Так как числа легче сравнить чем строку...
Reply
#6

Quote:
Originally Posted by ^Psy
создам отдельную тему, так как вопросов накопилось море и они не мелкие. буду задавать по очереди, мб кто то не запнеться на моих ошибках
http://s55.radikal.ru/i147/1005/f7/e5c9653ed6f0.jpg

почему так хреново пишется?

я хочу записать сколько игрок убивает с определенного оружия.
Code:
	format(query,SQL_CHECKER_SIZE,"UPDATE `"kWeaponTableName"` SET `0` = '%d',`1` = '%d',`2` = '%d',`3` = '%d',`4` = '%d',`5` = '%d',`6` = '%d',`7` = '%d',`8` = '%d',`9` = '%d',`10` = '%d',`11` = '%d',`12` = '%d' WHERE (`pName` = '%s')",
	iM[p][0],iM[p][1],iM[p][2],iM[p][3],iM[p][4],iM[p][5],iM[p][6],iM[p][7],iM[p][8],iM[p][9],iM[p][10],iM[p][11],iM[p][12],myNick[p]);
	mysql_query(query);
	format(query,SQL_CHECKER_SIZE,"UPDATE `"kWeaponTableName"` SET `13` = '%d',`14` = '%d',`15` = '%d',`16` = '%d',`17` = '%d',`18` = '%d',`19` = '%d',`20` = '%d',`21` = '%d',`22` = '%d',`23` = '%d',`24` = '%d',`25` = '%d' WHERE (`pName` = '%s')",
	iM[p][13],iM[p][14],iM[p][15],iM[p][16],iM[p][17],iM[p][18],iM[p][19],iM[p][20],iM[p][21],iM[p][22],iM[p][23],iM[p][24],iM[p][25],myNick[p]);
	mysql_query(query);
	format(query,SQL_CHECKER_SIZE,"UPDATE `"kWeaponTableName"` SET `26` = '%d',`27` = '%d',`28` = '%d',`29` = '%d',`30` = '%d',`31` = '%d',`32` = '%d',`33` = '%d',`34` = '%d',`35` = '%d',`36` = '%d',`37` = '%d',`38` = '%d' WHERE (`pName` = '%s')",
	iM[p][26],iM[p][27],iM[p][28],iM[p][29],iM[p][30],iM[p][31],iM[p][32],iM[p][33],iM[p][34],iM[p][35],iM[p][36],iM[p][37],iM[p][38],myNick[p]);
	mysql_query(query);
	format(query,SQL_CHECKER_SIZE,"UPDATE `"kWeaponTableName"` SET `39` = '%d',`40` = '%d',`41` = '%d',`42` = '%d',`43` = '%d',`44` = '%d',`45` = '%d',`46` = '%d' WHERE (`pName` = '%s')",
	iM[p][39],iM[p][40],iM[p][41],iM[p][42],iM[p][43],iM[p][44],iM[p][45],iM[p][46],myNick[p]);
А что не так? конечно выполнять три запроса это дико, в зависимости от ситуации:
Если код выполняется при убийстве, то проще будет
UPDATE `таблица` SET `ид оружия` = `ид оружия`+1 WHERE (`pName` = '%s')

и как верно замечено
Quote:
Originally Posted by Fro1sha
Quote:
Originally Posted by ^Psy
pawn Code:
if(mysql_fetch_row_data())
{
mysql_fetch_field(string,fetchint);
}
По идеи так надо это использовать, но эта хрень работает как-то через раз, лучше использовать mysql_fetch_row и через split или sscanf записывать все.
Quote:
Originally Posted by ^Psy
Quote:

тут лучше использовать числовой параметр как главный, а не строку, так как если будет дофига юзеров в бд, будут лаги...

будь добр, перефразируй. нифига не понял (
То есть использовать
pawn Code:
WHERE (`id` = '%d') // Уникальный ид
Так как числа легче сравнить чем строку...
необходим уникальный ид для игрока, который должен быть индексирован.
Reply
#7

почему данные настолько сильно искажены??
Reply
#8

Это уже вероятно наш дорогой СЭМП возвращает неверные результат, или просто не успевает их возвращать.
Reply
#9

кажется догадываюся... iM[p][42] - кинь enum от массива...
Reply
#10

new iS[MP][47]; // Попаданий
new iM[MP][47]; // Всего выстрелов
new LW[MP][47]; // Оружие из которого убивал
new KW[MP][47]; // соответственно наоборот
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)