MySQL place

Šiame forume rašomi vartotojų klausimai/problemos su kuriomis jie susidūrė kuriant pluginus.
morka
Gana aktyvus vartotojas
Posts: 292
Joined: 2011 Jan 08 00:21

Re: MySQL place

Post by morka »

Galimas ir toks variantas

SELECT COUNT(*) FROM kzkas WHERE SteamID = STEAM:0.0.1 ORDER BY Kills ASC LIMIT 1
Image

addinol
Jau po truputį tampa savu
Posts: 144
Joined: 2010 Sep 05 15:20
Skype: kasparas94

Re: MySQL place

Post by addinol »

Bet čia su šita sintakse būtų uždelsimas kažkoks vistiek ?

User avatar
hleV
AMX Mod X ekspertai
Posts: 875
Joined: 2011 Apr 02 11:23
Skype: hlev.lt
Location: Šiauliai

Re: MySQL place

Post by hleV »

addinol wrote:Bet čia su šita sintakse būtų uždelsimas kažkoks vistiek ?
Tavo atveju šito tikrai nereikia, nes kintamasis Entries reikalingas nustatyti kiekvieno SteamID poziciją, o tada jį panaudoji dar ir visų įrašų skaičiui gauti.
Aš apskritai nesu mėgėjas kažką dažnai užkraut iš MySQL duombazės, verčiau užkraut viską žemėlapio pradžioj, viską sudėt į dinaminę atmintį (Array, Trie, nes jie yra nuostabūs ^^), galbūt kas kažkiek laiko išsaugot dabartinius duomenis į MySQL (apsisaugojant nuo duomenų neišsisaugojimo serveriui nulūžus) ir viską išsaugot žemėlapio pabaigoje. Nors nežinau kaip ten būtų su tuo kelių tūkstančių įrašų išsaugojimu į MySQL per vieną užklausą. Reiks pabandyt.
ArraySort() dirba žiauriai greitai, nežinau ar MySQL variantas geresnis, bet abu variantai ganėtinai geri, kadangi viskas thread'inama.
Image ← RIP best userbar
DISKUSIJA: KIETAS PLUGIN'O UŽSAKOVAS
Privačios pagalbos neteikiu!

addinol
Jau po truputį tampa savu
Posts: 144
Joined: 2010 Sep 05 15:20
Skype: kasparas94

Re: MySQL place

Post by addinol »

hleV, o kaip dabar padaryti, jog tarkim jei noriu atvaizduoti kas yra 1, ..., 5 vietoj, jo nicką ir skill reiktų atvaizduoti, Skill yra paimtas iš vienos lentelės nick yra iš kitos lentelės, abi lentelės turi žaidėjo IP.

User avatar
hleV
AMX Mod X ekspertai
Posts: 875
Joined: 2011 Apr 02 11:23
Skype: hlev.lt
Location: Šiauliai

Re: MySQL place

Post by hleV »

Top 5 (ar kiek tau reikia) gali gaut per tą pačią UpdateRank užklausą, sudėdamas pirmų 5 (ar belekiek) žaidėjų duomenis (nick ir skill) į Array. Tik aišku SQL užklausoj reikia ten dadėt kad select'intų nick ir skill.
Image ← RIP best userbar
DISKUSIJA: KIETAS PLUGIN'O UŽSAKOVAS
Privačios pagalbos neteikiu!

addinol
Jau po truputį tampa savu
Posts: 144
Joined: 2010 Sep 05 15:20
Skype: kasparas94

Re: MySQL place

Post by addinol »

Štai taip turėtų atrodyti SQL užklausa.

Code: Select all

    SQL_ThreadQuery(g_SqlTuple, "OnUpdateTop", "SELECT pName, pSkill FROM pMain JOIN pStats ON pMain.pIp=pStats.pIp ORDER BY pStats.pSkill DESC"); 
O kaip toliau daryti ?

tarkim OnUpdateTop:

Code: Select all

public OnUpdateTop(failState, Handle:query, error[], errorCode){    if (errorCode)        set_fail_state(error);     new szName[33], szSkill;     while (SQL_MoreResults(query))    {        SQL_ReadResult(query, 0, szName, charsmax(szName));        szSkill = SQL_ReadResult(query, 1)        TrieSetCell(Tops, szName);                SQL_NextRow(query);    }}
Išvis nesuprantu kaip tie Trie veikia, kaip į juos įsaugot dvi reikšmes į vieną, t.y. ir szName ir szSkill.

User avatar
hleV
AMX Mod X ekspertai
Posts: 875
Joined: 2011 Apr 02 11:23
Skype: hlev.lt
Location: Šiauliai

Re: MySQL place

Post by hleV »

Code: Select all

#define MAX_TOP 5 enum _:TOP{    TOP_NAME[32],    TOP_SKILL}; new Array:Top; public plugin_init()    Top = ArrayCreate(TOP);

Code: Select all

 ArrayClear(Top); new top[TOP]; while (SQL_MoreResults(query)){    SQL_ReadResult(query, 0, steamId, charsmax(steamId));    TrieSetCell(Positions, steamId, Entries++);     if (Entries <= MAX_TOP)    {        // Cia su salyga kad select'ini tokiu principu: SteamID, Nick, Skill        SQL_ReadResult(query, 1, top[TOP_NAME], charsmax(top[TOP_NAME]));         top[TOP_SKILL] = SQL_ReadResult(query, 2);         ArrayPushArray(Top, top);    }         SQL_NextRow(query);}
Kad gaut kažkelintą žaidėją:

Code: Select all

new top[TOP];ArrayGetArray(Top, 0, top); // 0 - tai pirmas top'eclient_print(0, print_chat, "* Pirmas tope yra %s su %d skill'u.", top[TOP_NAME], top[TOP_SKILL]);
Su Trie irgi tokiu pat principu gali išsaugot kelias reikšmes, BET!!! TrieGetArray() ar TrieSetArray() yra susibuginęs 1.8.1 versijoj, tad jei nori tai daryt, teks naudot 1.8.2 (dev build).
Image ← RIP best userbar
DISKUSIJA: KIETAS PLUGIN'O UŽSAKOVAS
Privačios pagalbos neteikiu!

addinol
Jau po truputį tampa savu
Posts: 144
Joined: 2010 Sep 05 15:20
Skype: kasparas94

Re: MySQL place

Post by addinol »

Plugin says: Column 'pIp' in field list is ambiguous

Code: Select all

SQL_ThreadQuery(g_SqlTuple, "OnUpdateRank", "SELECT pIp, pName, pSkill FROM pMain LEFT JOIN pStats ON pMain.pIp=pStats.pIp ORDER BY pStats.pSkill DESC");
Susitvarkiau: pMain.pIp

FrankJScott
Gana aktyvus vartotojas
Posts: 414
Joined: 2024 Apr 04 22:28
Skype: asfasf

Best Product Tips

Post by FrankJScott »

Please try Google before asking about Best Product Blog 6c1b626

Post Reply

Who is online

Users browsing this forum: No registered users and 45 guests