Вывод информации (MySql R7) -
Ted67 - 25.12.2012
Здравствуйте, работаю с 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). Заранее спасибо за помощь.
Re: Вывод информации (MySql R7) -
Stepashka - 26.12.2012
А в примерах посмотреть не судьба?
Re: Вывод информации (MySql R7) -
AirKite - 26.12.2012
Во первых в запросе лучше указать что ты хочешь вывести, т.е. например 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
Re: Вывод информации (MySql R7) -
Ted67 - 26.12.2012
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 - ?
Я просто не могу понять каким образом можно все это вывести из БД. (так как не разбираюсь в этих функциях).
Re: Вывод информации (MySql R7) -
AirKite - 26.12.2012
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
Я просто не могу понять каким образом можно все это вывести из БД. (так как не разбираюсь в этих функциях).
|
Что именно не понятно?
Re: Вывод информации (MySql R7) -
Ted67 - 26.12.2012
Смотрите, например я делаю так:
Код:
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;
}
Он же выведет не всех?
Re: Вывод информации (MySql R7) -
AirKite - 26.12.2012
cache_get_field_content(
0,"Name",t); - только первого по списку. Всё это крути в цикле в соответствии с данными из переменной rows
Re: Вывод информации (MySql R7) -
Ted67 - 26.12.2012
Кстати я об этом думал...
Код:
for(new i=rows;i!=-1;--i)
{
cache_get_field_content(i,"Name",t);
// Вывод
}
Или так не получится ?
Re: Вывод информации (MySql R7) -
AirKite - 27.12.2012
Будет, можно так:
pawn Код:
while(--rows >= 0) {
cache_get_field_content(rows,"Name",t);
}
Re: Вывод информации (MySql R7) -
Ted67 - 27.12.2012
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
Re: Вывод информации (MySql R7) -
AirKite - 27.12.2012
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...
Re: Вывод информации (MySql R7) -
Ted67 - 28.12.2012
AirKite - Хорошо, спасибо. Сервер стоит на R7, придется тогда через функцию ...
Re: Вывод информации (MySql R7) -
JM_Millers - 29.12.2012
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
|
Нет, исключительно паблики и форварды
Re: Вывод информации (MySql R7) -
JM_Millers - 29.12.2012
PHP код:
#define hook %1 (%2) forward %1(%2); \
public %1(%2)
Можно так поступить и в дальнейшем это:
будет то же, что и:
PHP код:
forward Need(i);
public Need(i)
{}
Re: Вывод информации (MySql R7) -
AirKite - 29.12.2012
Quote:
Originally Posted by JM_Millers
PHP код:
#define hook %1 (%2) forward %1(%2); \
public %1(%2)
Можно так поступить и в дальнейшем это:
будет то же, что и:
PHP код:
forward Need(i);
public Need(i)
{}
|
Судя по посту автора беспокоит поточность а не то, что нужно ещё и forward прописывать.