Szerző Téma: MySQL Loop  (Megtekintve 2378 alkalommal)

MySQL Loop
« Dátum: 2011. Április 16. - 13:30:20 »
0 Show voters
Ü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

Nem elérhető DrAkE

  • 2078
    • Profil megtekintése
MySQL Loop
« Válasz #1 Dátum: 2011. Április 16. - 13:47:09 »
0 Show voters
#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

MySQL Loop
« Válasz #2 Dátum: 2011. Április 16. - 13:53:13 »
0 Show voters
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
« Utoljára szerkesztve: 2011. Április 16. - 13:54:46 írta hegdavid95 »

MySQL Loop
« Válasz #3 Dátum: 2011. Április 16. - 19:21:21 »
0 Show voters
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.

MySQL Loop
« Válasz #4 Dátum: 2011. Április 16. - 20:19:31 »
0 Show voters
Ja rendben köszi :D
nem értek még anyira nagyona MYSQL hez csak kicsit köszi szépen :D
 Zárok!

MySQL Loop
« Válasz #5 Dátum: 2011. Április 27. - 18:52:59 »
0 Show voters
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.

MySQL Loop
« Válasz #6 Dátum: 2011. Április 27. - 20:34:19 »
0 Show voters
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.

MySQL Loop
« Válasz #7 Dátum: 2011. Április 27. - 21:18:23 »
0 Show voters
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)
« Utoljára szerkesztve: 2011. Április 27. - 21:51:02 írta hegdavid95 »

MySQL Loop
« Válasz #8 Dátum: 2011. Április 27. - 22:02:56 »
0 Show voters
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);
}
« Utoljára szerkesztve: 2011. Április 27. - 22:08:37 írta Zsolesszka »

MySQL Loop
« Válasz #9 Dátum: 2011. Április 27. - 22:09:42 »
0 Show voters
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)

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal