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