Page 1 of 3

MySQL place

Posted: 2011 Oct 15 18:06
by addinol
Sveiki, kaip gauti žaidėjo vietą tarkim pagal Kills iš x lentelės. Ir kiek ten išviso įrašų yra.

Lentelė atrodo taip:
SteamID-----Kills


Ir noriu atvaizduoti taip:
Tu esi 5 is 1461.

Re: MySQL place

Posted: 2011 Oct 15 18:52
by hleV
Naudojant SQL_ThreadedQuery() atsakymą gausi ne tą pačią akimirką (nieko gero).
Naudojant įprastą query gali užlagint (nerekomenduoju).
Kešuok.

Netestavau, bet turėtų būt į temą:

Code: Select all

new Entries;new Trie:Positions; public plugin_init()    Positions = TrieCreate(); UpdateRank(){    // Gaunam visus irasus pagal Kills (nuo didziausio)    SQL_ThreadQuery(Tuple, "OnUpdateRank", "SELECT SteamID FROM x ORDER BY Kills DESC");} public OnUpdateRank(failState, Handle:query, error[], errorCode){    if (errorCode)        set_fail_state(error);     Entries = 0;    new steamId[32];     while (SQL_MoreResults(query))    {        SQL_ReadResult(query, 0, steamId, charsmax(steamId));        TrieSetCell(Positions, steamId, Entries++);    }} GetPosition(const steamId[]){    new pos;     TrieGetCell(Positions, steamId, pos);     return pos + 1;}

Code: Select all

new steamId[32];get_user_authid(id, steamId, charsmax(steamId));client_print(id, print_chat, "Tu esi %d is %d.", GetPosition(steamId), Entries);

Re: MySQL place

Posted: 2011 Oct 15 19:24
by addinol
O updatinti visad, kai pasikeičia žaidėjo kills, taip ? :) Beje pas mane virš 10 000 įrašų, tai ar tas trie atlaikys? ;D

Re: MySQL place

Posted: 2011 Oct 15 20:00
by hleV
Trie atlaikys, o update daryk kas raundą ar pnš.

Re: MySQL place

Posted: 2011 Oct 15 20:26
by aaarnas
Poziciją galima gauti ir su mysql užklausa (nekraunant visų žaidėjų), tik nelabai pamenu kaip ją užrašyti.

Re: MySQL place

Posted: 2011 Oct 15 20:53
by addinol
Update darau, kas kill. Manau atlaikys, nes nedaug kitų sql užklausų yra išviso. Tuo pačiu metu beveik neivienas neveikia, tik nebent keli žmonės padaro kill tuo pačiu laiku.

-- 2011 Spa 15 22:16 --

Beje gaunu errorą:

Function is not present (function "UpdateRank")

Kurį naudoju plugin_init()

EDIT: ir dar nesupratau šito esmės: new steamId[32]; kurį naudojai OnUpdateRank funkcijoj, jis sukuriamas, bet tušcias juk.

Re: MySQL place

Posted: 2011 Oct 15 21:47
by hleV
addinol wrote:Beje gaunu errorą:

Function is not present (function "UpdateRank")

Kurį naudoju plugin_init()
Pridėk public prie UpdateRank().
EDIT: ir dar nesupratau šito esmės: new steamId[32]; kurį naudojai OnUpdateRank funkcijoj, jis sukuriamas, bet tušcias juk.
Taigi žiūrėk kur vėliau jis naudojamas funkcijoj.

Re: MySQL place

Posted: 2011 Oct 15 22:12
by addinol
o dabar serveris kimba, be jokių error be nieko, tiesiog rodo offline ir neleidžia prisijungti. Nors loguose nieko nėra ir paleidimo lange atrodo viskas normalei, o kai atjungiu pluginą - normaliai.

Re: MySQL place

Posted: 2011 Oct 15 22:21
by psychical

Code: Select all

SET @rownum := 0; SELECT * FROM (SELECT @rownum := @rownum+1 AS POSITION, player_time FROM played_time_table ORDER BY player_time DESC) AS played_time_table WHERE POSITION = 1;
P.S. player_time - pagal ka ieskos tavo norimos vietos

Re: MySQL place

Posted: 2011 Oct 15 22:26
by addinol
SELECT * FROM (SELECT @rownum := @rownum+1 AS POSITION, player_time FROM played_time_table ORDER BY player_time DESC) AS played_time_table WHERE POSITION = 1;

O kaip šitą į pawn kalbą paversti nes kiek iš čia matau tai tų @ nesuprantu ;D ir POSITION ;D