Вывод информации (MySql R7)
#1

Здравствуйте, работаю с mysql недавно, вот хотел бы узнать, каким образом можно будет вывести определенную информацию с определенными критериями? Например: нужно вывести НИКИ игроков у которых Поле АДМИН равно 1. Я сделал только начало:

Код:
mysql_function_query(1,"SELECT * FROM `Players` WHERE `Admin`='1'",true,"Test","d",playerid);
Код:
forward Test(playerid);
public Test(playerid)
{
    new rows,fields;
	cache_get_data(rows, fields);
	if(rows)
	{
// Found
	}
	else // Not found
	return 1;
}
Например он нашел 5 аккаунтов, соответственно rows = 5, но как в этих найденных 5-ых записях, вытащить ники (Name) ? Для примера: в бд есть поля: Name, ID, Admin (Name нужно вывести по Admin). Заранее спасибо за помощь.
Reply
#2

А в примерах посмотреть не судьба?
Reply
#3

Во первых в запросе лучше указать что ты хочешь вывести, т.е. например SELECT name, id FROM (если нужно выводить все поля, то оставь "*"). Далее у тебя есть функции: cache_get_row, cache_get_field, cache_get_field_content.
Например cache_get_row(0, 0, string); или cache_get_field_content(0, "name", string); - вернёт в string поле name первого найденного в таблице админа.

Все функции описаны на странице плагина https://sampforum.blast.hk/showthread.php?tid=56564
Reply
#4

Stepashka - Видимо нет, не судьба. Покажите мне пример того, что мне нужно, если найдет 1-го администратора, тогда его одного и выведет, а нужно нескольких.

AirKite - Спасибо, читал вики, но немного не понял. И, что вы имели ввиду?:
Quote:

если нужно выводить все поля, то оставь "*"

Если я правильно понял, тут я вывожу все поля:
Код:
mysql_function_query(1,"SELECT * FROM `Players` WHERE `Admin`='1'",true,"Test","d",playerid);
А если я хочу только Name, делаю так?:
Код:
mysql_function_query(1,"SELECT `Name` FROM `Players` WHERE `Admin`='1'",true,"Test","d",playerid);
---
При помощи cache_get_field я вывожу данные в массив через Индекс поля в БД? cache_get_field_content - вывожу ин-цию по названию поля? а при помощи cache_get_row - ?
Я просто не могу понять каким образом можно все это вывести из БД. (так как не разбираюсь в этих функциях).
Reply
#5

Quote:
Originally Posted by Ted67
Посмотреть сообщение
AirKite - Спасибо, читал вики, но немного не понял. И, что вы имели ввиду?:


Если я правильно понял, тут я вывожу все поля:
Код:
mysql_function_query(1,"SELECT * FROM `Players` WHERE `Admin`='1'",true,"Test","d",playerid);
А если я хочу только Name, делаю так?:
Код:
mysql_function_query(1,"SELECT `Name` FROM `Players` WHERE `Admin`='1'",true,"Test","d",playerid);
Да, всё верно!


Quote:
Originally Posted by Ted67
Посмотреть сообщение
При помощи cache_get_field я вывожу данные в массив через Индекс поля в БД?
(в R7 намудрили с названиями фкнкций) При помощи неё ты узнаешь имя столбца, по индексу поля в ответе, который выстраивается в зависимости от порядка запроса. т.е. если SELECT Name, Pass FROM то у индекса 0 будет ответ "Name" а у 1 "Pass". Если же SELECT Pass, Name FROM то уже наоборот 1 будет ответ "Name" а у 0 "Pass" и т.д.

Quote:
Originally Posted by Ted67
Посмотреть сообщение
cache_get_field_content - вывожу ин-цию по названию поля?
Именно.

Quote:
Originally Posted by Ted67
Посмотреть сообщение
а при помощи cache_get_row - ?
Это тот же cache_get_field_content только по идам столбцов по запросу.

Quote:
Originally Posted by Ted67
Посмотреть сообщение
Я просто не могу понять каким образом можно все это вывести из БД. (так как не разбираюсь в этих функциях).
Что именно не понятно?
Reply
#6

Смотрите, например я делаю так:

Код:
forward Test(playerid);
public Test(playerid)
{
    new rows,fields;
	cache_get_data(rows, fields);
	if(rows)
	{
new t[24],str[30];
cache_get_field_content(0,"Name",t);
format(str,30,"Name %s",t);
SendClientMessage(playerid,-1,str);
	}
	else // Not found
	return 1;
}
Он же выведет не всех?
Reply
#7

cache_get_field_content(0,"Name",t); - только первого по списку. Всё это крути в цикле в соответствии с данными из переменной rows
Reply
#8

Кстати я об этом думал...

Код:
for(new i=rows;i!=-1;--i)
{
cache_get_field_content(i,"Name",t); 
// Вывод
}
Или так не получится ?
Reply
#9

Будет, можно так:
pawn Код:
while(--rows >= 0) {
    cache_get_field_content(rows,"Name",t);
}
Reply
#10

AirKite - Хорошо, большое спасибо за помощь!

p.s. + дал )

И, еще один вопрос, можно ли обойтись без public'a и forward'a. То есть сразу в команде все сделать, пробовал вместо mysql_function_query использовать mysql_query("str",-1,0,1); и после cache_get_data:

Код:
        mysql_query("SELECT `Name` FROM `Players` WHERE `Admin`='1'",-1,0,1);
	new rows,fields;
	cache_get_data(rows,fields);
	if(rows)
	{
new t[32],STR[32];
		format(STR,32,"R: %s",t);
		SendClientMessage(playerid,white,STR);
	}
	else // Not Found
Reply
#11

Quote:
Originally Posted by Ted67
Посмотреть сообщение
AirKite - Хорошо, большое спасибо за помощь!

p.s. + дал )

И, еще один вопрос, можно ли обойтись без public'a и forward'a. То есть сразу в команде все сделать, пробовал вместо mysql_function_query использовать mysql_query("str",-1,0,1); и после cache_get_data:

Код:
        mysql_query("SELECT `Name` FROM `Players` WHERE `Admin`='1'",-1,0,1);
	new rows,fields;
	cache_get_data(rows,fields);
	if(rows)
	{
new t[32],STR[32];
		format(STR,32,"R: %s",t);
		SendClientMessage(playerid,white,STR);
	}
	else // Not Found
Можно, только в R6 версии плагина. Там нет cache_, но есть аналоги, причём ничем не уступающие.

pawn Код:
mysql_query("SELECT `Name` FROM `Players` WHERE `Admin`='1'");
mysql_store_result(); // записать в память то, что ответит MySQL сервер.
while(mysql_retrieve_row()) { // цикл по всем row (сама функцию спускается по row и возвращает true до тех пор, пока не дойдёт до конца)
    new result[50],string[128];
    mysql_fetch_field_row(result,"name");
    format(string, 128, "Admin Name: %s", result);
    SendClientMessageToAll(-1, string); // отправляем всем игрокам список админов из БД
}
mysql_free_result(); // освободить память, юзать после mysql_ store_result() и всех манипуляций.
p.s. плюса не вижу, а R7 относительно каша-малаша... шило на мыло, я так и не понял чем cache_ отличается от ряда других функций кроме как то, что не нужно юзать mysql_store_result и mysql_free_result...
Reply
#12

AirKite - Хорошо, спасибо. Сервер стоит на R7, придется тогда через функцию ...
Reply
#13

Quote:
Originally Posted by Ted67
Посмотреть сообщение
AirKite - Хорошо, большое спасибо за помощь!

p.s. + дал )

И, еще один вопрос, можно ли обойтись без public'a и forward'a. То есть сразу в команде все сделать, пробовал вместо mysql_function_query использовать mysql_query("str",-1,0,1); и после cache_get_data:

Код:
        mysql_query("SELECT `Name` FROM `Players` WHERE `Admin`='1'",-1,0,1);
	new rows,fields;
	cache_get_data(rows,fields);
	if(rows)
	{
new t[32],STR[32];
		format(STR,32,"R: %s",t);
		SendClientMessage(playerid,white,STR);
	}
	else // Not Found
Нет, исключительно паблики и форварды
Reply
#14

PHP код:
#define hook %1 (%2) forward %1(%2); \
                                     
public %1(%2
Можно так поступить и в дальнейшем это:

PHP код:
hook Need(i)
{} 
будет то же, что и:

PHP код:
forward Need(i);
public 
Need(i)
{} 
Reply
#15

Quote:
Originally Posted by JM_Millers
Посмотреть сообщение
PHP код:
#define hook %1 (%2) forward %1(%2); \
                                     
public %1(%2
Можно так поступить и в дальнейшем это:

PHP код:
hook Need(i)
{} 
будет то же, что и:

PHP код:
forward Need(i);
public 
Need(i)
{} 
Судя по посту автора беспокоит поточность а не то, что нужно ещё и forward прописывать.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)