GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Segítségkérés => A témát indította: hegdavid95 - 2011. április 16. - 13:30:20

Cím: MySQL Loop
Írta: hegdavid95 - 2011. április 16. - 13:30:20
Üdv!
Szükségem élenne egy Loop ra ami az összes mysql soron lefut ami létre van hozva.
Pontosabban egy /adminlist parancshoz kell. köszönöm
Cím: MySQL Loop
Írta: DrAkE - 2011. április 16. - 13:47:09
#include <a_samp>
#include <a_mysql>
#define GET_INT(%1,%2)                mysql_fetch_field_row(tmp, %2);%1 = strval(tmp)
#define GET_STR(%1,%2)                mysql_fetch_field_row(%1, %2)
new
mysql_kapcsolat;
public OnFilterScriptInit()
{
print(\"Valami\");
    mysql_kapcsolat = mysql_connect(\"localhost\", \"root\", \"kamionozas\", \"\");
mysql_query(\"SELECT * FROM `adminok` WHERE `szint` >= \'1\'\", -1, -1, mysql_kapcsolat);
mysql_store_result(mysql_kapcsolat);
while(mysql_retrieve_row())
{
    new tmp[32], neve[MAX_PLAYER_NAME], adminszint;
    GET_INT(adminszint, \"szint\");
GET_STR(neve, \"nev\");
printf(\"%s - %d\", neve, adminszint);
}
return 1;
}
public OnFilterScriptExit()
{
return 1;
}

 
Remélem ennek alapján megtudod csinálni :D
Cím: MySQL Loop
Írta: hegdavid95 - 2011. április 16. - 13:53:13
Köszönöma részletes leirást de igazábol nekem öszinténszolva csak egy függvény kéne ami oylasmi mint egy ciklus ami minde playeren végighalad egy ilyen kéne mysql re ami minden soron végighalad egy adott táblán belül
Cím: MySQL Loop
Írta: Zsolesszka - 2011. április 16. - 19:21:21
Idézetet írta: hegdavid95 date=1302954793\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"7554\" data-ipsquote-contentclass=\"forums_Topic
Köszönöma részletes leirást de igazábol nekem öszinténszolva csak egy függvény kéne ami oylasmi mint egy ciklus ami minde playeren végighalad egy ilyen kéne mysql re ami minden soron végighalad egy adott táblán belül
 
Amit Drake postolt kódot az végig fut minden egyes soron ami az adott táblában van.
 
while(mysql_retrieve_row())[/quote]
Akkor mi a gondod? leírhatnád bõvebben.
Cím: MySQL Loop
Írta: hegdavid95 - 2011. április 16. - 20:19:31
Ja rendben köszi :D
nem értek még anyira nagyona MYSQL hez csak kicsit köszi szépen :D
 Zárok!
Cím: MySQL Loop
Írta: hegdavid95 - 2011. április 27. - 18:52:59
Bocsi a duplapostért de nem akartam már külön témát ennek mivel ez összefügg.
[pawn]
CMD:adminlist(playerid, params[])
{
new Line[128+1],name[MAX_PLAYER_NNAME];
if(GetPVarInt(playerid,\"Level\") >=1)
{
   new level;
   mysql_query(\"SELECT * FROM `players`\");
   mysql_store_result();
   new DIALOGstring[2000];
   while(mysql_fetch_row(Line))
   {
      sscanf(Line,\"p<|>{d}s[24]{s[16]s[30]s[24]s[60]ddd}d{ddddddddddddddddddddds[3700]dd}\",name,level);
      if (level > 0)
      {
      format(DIALOGstring,2000,\"%s\\n{\"#00BFFF\"}%s(%d)\",DIALOGstring,name,level);
      }
   }
   ShowPlayerDialog(playerid,DIALOG_INFO,DIALOG_STYLE_MSGBOX,\"ADMIN LISTA:\",DIALOGstring,\"Rendben\",\"\");
    mysql_free_result();
    }else{SendClientMessage(playerid,COLOR_RED,\"Hiba: {\"#FFFFFF\"}Ennek a parancsnak a használatához legalább 1-es szintû adminnak kéne lenned!\");}
return 1;
}
[/pawn]
ezt sikerült összehozni viszont az sscanf állandóan baszogat egy ilyennel:
sscanf warning: Format specifier does not match parameter count.
Cím: MySQL Loop
Írta: Zsolesszka - 2011. április 27. - 20:34:19
Akkor ott kezdeném hogy mysql sokra többre képes megadhatod neki hogy milyen adatot olvasson be egy adat táblából.
Amit írtál kódot abban feleslegesen kéred le az összes adatot.
mysql adatbázisból így kérd le mivel neked csak kettõ adatra van szükséged:
 

mysql_query(\"SELECT `Username`, `Level` FROM `players` WHERE `Level` > 0 ORDER BY `Level` DESC\");

 
Természetesen az `Username` és a `Level` kifejezést írd arra amit te használsz.
Ez kiválasztja a players adat táblát azokon belül az Username és Level mezõt így vissza térési értéknek csak ez lesz.
A WHERE utáni rész már egybõl csak a 0-nál nagyobb adminszintel rendelkezõ adatokra korlátozza a lekérést.
Az ORDER BY `Level` DESC pedig csökkenõ sorrendbe rendezi.
Természetesen továbbra is kell a
 

mysql_store_result();
while(mysql_fetch_row(Line))

 
Ciklus utasítás hogy végig mennyen az összes érvényes találaton.
Cím: MySQL Loop
Írta: hegdavid95 - 2011. április 27. - 21:18:23
nagyon köszi :)
Máskor nem szoktam  iylen gyorsan feladni, de most tényleg nem értem :S
[pawn]CMD:adminlist(playerid, params[])
{
if(GetPVarInt(playerid,\"Level\") >=5 || IsPlayerAdmin(playerid))
{
   new level;
   new adminname[24];
   mysql_query(\"SELECT `name`, `level` FROM `players` WHERE `Level` > 0 ORDER BY `Level` DESC\");
   mysql_store_result();
   new DIALOGstring[2000];
   while(mysql_fetch_row(Line))
   {
           sscanf(Line,\"p<|>{d}s[24]{s[16]s[30]s[24]s[60]ddd}d{ddddddddddddddddddddds[3700]dd}\",adminname,level);
      format(DIALOGstring,2000,\"%s%s(%d)\\n\",DIALOGstring,adminname,level);
   }
   print(DIALOGstring);
        mysql_free_result();
   ShowPlayerDialog(playerid,DIALOG_INFO,DIALOG_STYLE_MSGBOX,\"{\"#FFFF00\"}Admin lista:\",DIALOGstring,\"Rendben\",\"\");
        }else{SendClientMessage(playerid,COLOR_RED,\"Hiba: {\"#FFFFFF\"}Ennek a parancsnak a használatához legalább 5-ös szintû adminnak kéne lenned!\");}
return 1;
}[/pawn]
a kiválasztásos résznél valoszinüleg jo mert annyi sor van ahány admin valamit a ciklusnál rontok el szerintem.
ez lesz belöle:
Admin lista:
          (0)
          (0)
          (0)
          (0)
          (0)
          (0)
          (0)
Cím: MySQL Loop
Írta: Zsolesszka - 2011. április 27. - 22:02:56
Mivel csak két adatot kérsz le így az adat táblából akkor nem kell ennyi sscanf format \"p<|>{d}s[24]{s[16]s[30]s[24]s[60]ddd}d{ddddddddddddddddddddds[3700]dd}\"
Csak kettõ mivel két adat van lekérve.
[pawn]
sscanf(Line,\"p<|>s[24]d\", adminname, level);
[/pawn]
 

while(mysql_fetch_row(Line))
{
   print(line); // hogy lásd milyen adatot kell darabolnod sscanf segítségével ha át tanulmányoztad akkor kiveszed a print sort
   sscanf(Line,\"p<|>s[24]d\", adminname, level);
   format(DIALOGstring,2000,\"%s%s(%d)\\n\",DIALOGstring,adminname,level);
}
Cím: MySQL Loop
Írta: hegdavid95 - 2011. április 27. - 22:09:42
Köszi zsoleszka ez müködik is és joval gyorsabb mint amit legelöször csináltam :)
tök jo lett köszi :D
zárok (ujra xD)