Szerző Téma: Listázás  (Megtekintve 842 alkalommal)

Listázás
« Dátum: 2016. március 17. - 14:45:14 »
0 Show voters
Hali!! Most tanulom a mysql-t és azt szeretném megkérdezni, hogy hogyan tudnám azt megcsinálni, hogy aki nincs fent annak is kilistázza a nevét ha beírok valami parancsot. Ne csak azt aki fent van.Köszi a válaszokat!

Nem elérhető BackUP

  • 908
    • Profil megtekintése
Listázás
« Válasz #1 Dátum: 2016. március 17. - 16:42:30 »
0 Show voters
az táblából kikéred az összes nevet egy tömbbe, és kedvedre megformázva kiiratod. :)

Nem elérhető whadez

  • 719
  • DEFEATER
    • Profil megtekintése
Listázás
« Válasz #2 Dátum: 2016. március 17. - 17:38:26 »
0 Show voters

#define SendFormatMessage(%1,%2,%3,%4) SendClientMessage(%1,(%2),(format(sendfstring,256,(%3),%4), sendfstring))
CMD:karakterlista(playerid)
{
mysql_query(g_SQL, \"SELECT pName FROM `jatekosok`\");
// if(!cache_num_rows()) return SendClientMessage(playerid, -1, #Nincsenek elérhető karakterek);
new i = -1, var_pName[MAX_PLAYER_NAME];
for(;++i < cache_num_rows();)
{
   cache_get_field_content(i, \"pName\", var_pName, g_SQL, MAX_PLAYER_NAME);
   SendFormatMessage(playerid, -1, #Karakter Név: %s, var_pName);
}
if((cache_num_rows()) ? SendFormatMessage(playerid, -1, #Összesen %i karakter van az adatbázisban., cache_num_rows()) : SendClientMessage(playerid, -1, #Nincsenek az adatbázisban karakterek!)) { return true; }
return true;
}

 
Parancsolj, itt egy működőképes. A végéről törölheted a Ternary Operatort ha zavar. R39 SQL-en hibátlanul működik.  :wave:
« Utoljára szerkesztve: 2016. március 18. - 15:21:42 írta whadez »

Listázás
« Válasz #3 Dátum: 2016. március 17. - 18:37:00 »
0 Show voters
Köszönöm szépen! Másik kérdésem ezzel a kóddal, hogy ezek mit jelentenek:
cache_get_field_content
cache_num_rows
Pontosabban mit csinálnak és mire szolgál.
Még annyit, hogy ez hátha segít nekem így néz ki egy játékos betöltése:
 

new query[128];
Format(query, \"SELECT * FROM %s WHERE id = \'%d\'\", SQL_DB_Player, PlayerInfo[playerid][pID]);
mysql_query(query);
new datas[MAX_MYSQL_STRING];
new data[200][256];
mysql_store_result();
mysql_fetch_row(datas, \"|\");
mysql_free_result();
split(datas, data, \'|\');
PlayerInfo[playerid][pLevel] = strval(data[3]);

 
Régi s**rpg modból van és pontosabban úgy szeretném listázni hogy pl akinek a szint az lvl5 csak azokat
« Utoljára szerkesztve: 2016. március 17. - 18:42:26 írta baglion02 »

Listázás
« Válasz #4 Dátum: 2016. március 17. - 19:14:22 »
0 Show voters
Tegyük rendben az R34+ és a Regi MySQL-t.
R34+:
cache_get_field_content = ez szöveges érték betöltése
cache_get_field_content_int = Egészszámok betöltése
cache_get_field_content_float = Lebegőpontos számok betöltése
cache_num_rows = kiszámolja hány sor van ami megegyezik a feltételeknek.
Az R34+ az egy kicsit dinamikusabb és egyszerűbb, nem kell pontra megadni az oszlopot, hogy hanyadik, de itt bővebben van róla szó: https://sampforum.hu/index.php?topic=53610.0
A régi MySQL:
Azt úgy kell elképzelni, mint a szalámit, jobbat nem tudok rá. :D \"szeletelni kell\".
mysql_store_result = eltárolja a lekéréseket.
mysql_fetch_row = ez osztja szét datas értéket \"|\" elválasztással.
mysql_free_result = Ezt a lekérés után kell raknod.
split(datas, data, \'|\'); = itt a szeletelés, itt bontja szét az egész eredményt azaz betölti a rendszernek így:
 
Brian_Harris|jelszohashkodolas|31|...[/quote]
szóval ha te a szintemet akarod lekérdezni akkor data[2] fogod elérni, itt a tied:
 
PlayerInfo[playerid][pLevel] = strval(data[3]);[/quote]
A data 3 azt jelzi, hogy a tábla struktúrában, a 3. oszlop a szint( Ha már itt írod a data[4]-re akkor a 4. oszlop fog betöltődni!)
A problémádra visszatérve, a lekérdezést kell módosítani, a Whadez általi megoldásra, de mivel SeeMód és egyből nem ment a rendszer így egyszerűbb ez, mert ha van az adatbázisba 312412 játékos aki 5 lvl és te kilistázod mind a 312412 játékost semmit se fogsz látni, sőt ha nem atomerőművel játszol ki is fagyhatsz.
 

new str[128];
for(new x = 0; x<MAXPLAYERS;x++)
{
    if(PlayerInfo
  • [pLevel] == 5)

   {
    format(str, sizeof(str), \"Név: [%d] %s | Szint: [%d]\",x, PlayerNameEx(x), PlayerInfo
  • [pLevel]);

    SendClientMessage(playerid, -1, str);
    }
}

 
Szerk:
A Whadezébe módosíts, ha továbbra is az offline tagokat akarod kilistázni, így:
 
format(uzenet,sizeof(uzenet), \"SELECT pName FROM `jatekosok` WHERE Szint=\'5\'\");
« Utoljára szerkesztve: 2016. március 17. - 19:33:27 írta Brian Harris »

Listázás
« Válasz #5 Dátum: 2016. március 18. - 12:15:48 »
0 Show voters
És ami én használok azzal nem tudnátok leírni, hogy hogyan kellene? megköszönném
EDIT: Ne csak azt írja ki aki fent van, azt is kéne aki nincs

Dupla hozzászólás automatikusan összefûzve. ( 2016. március 18. - 19:02:08 )

Ötlet valakinek?
« Utoljára szerkesztve: 2016. március 18. - 19:02:08 írta baglion02 »

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal