Započeo Slade
•12. Avg. 2018.• ZaključanoOffline ažuriranje [MYSQL]
2,283
pregleda
10
postova
Godfather
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
241 / 250 XP
Početnik(0)
2,043
Postovi:
83
Teme:
Pridružio se:Jan. 2014
12. Avg. 2018.
Offline skidanje admin nivoa uz provjeru trenutnog
Naime ovo je naÄin koji i sam koristim u svojoj skripti, i obzirom kada sam prelazio na mysql, previÅ¡e sam se muÄio oko osnova, pa i oko ovoga, ako ima netko ko poÄinje raditi u MySQL Äuvanju, ovo će mu možda pomoći.
Selektovanje igraÄa.
Naime moramo prvo uzeti tog igraÄa, tj. selectovati ga.
mysql_format(Database, DB_Query, sizeof(DB_Query), "SELECT * FROM `PLAYERS` WHERE `USERNAME` = '%e' LIMIT 1", nick);
new Cache:rezultat = mysql_query(Database, DB_Query); //Spremanje cache-aLIMIT 1 - oznaÄava da želimo samo 1 select iz table-a, Username je uglavnom unique dio kad je igraÄ u pitanju, ali ova opcija vam mnogo pomaže kada želite selektovati samo jednog igraÄa koji je povezan sa neÄime Äiju jednakost mogu imati mnogi (recimo viÅ¡e igraÄa može imati okruglo 1.000.000$ na banci)
Broj redova
Ovdje jednostavno uzimamo broj redova, u novu varijablu rows.
new rows;
cache_get_row_count(rows); //Provjera redovaProvjera broja redova
Jednostavno, provjerit ćemo dal se red selektovao, ako je rows veći od 0, jednostavno netko je selektovan, u ovom sluÄaju samo jedan raÄun može biti, ali može se takoÄ‘er selektovati i viÅ¡e njih.
if (rows)Uzimanje vrijednosti
Red je da uzmemo igraÄu trenutni admin i helper level.
if (rows) { //Provjera ukoliko raÄun postoji
new alevel, hlevel;
cache_get_value_int(0, "ADMIN", alevel); //Uzimanje admin nivoa igraÄu
cache_get_value_int(0, "HELPER", hlevel); //Uzimanje helper nivoa igraÄu
}"ADMIN" i "HELPER" su imena koja su u mojoj bazi, ako ste vi svoje nazvali pGameMaster, pHelper, pSupporter, ili sasvim nebitno, unesite tu vrijednost. Napomena: "ADMIN" ne oznaÄava vrijednost iz PlayerInfo enuma, nego iz kolone iz MySQL baze.
Sada, možete tu komandu jednostavno iskoristiti kako hoćete, uz ovako nekakve primjere:
if (rows) { //Provjera ukoliko raÄun postoji
new alevel, hlevel;
cache_get_value_int(0, "ADMIN", alevel); //Uzimanje admin nivoa igraÄu
cache_get_value_int(0, "HELPER", hlevel); //Uzimanje helper nivoa igraÄu
if(alevel > pInfo[ playerid ]) return SendErrorMessage(playerid, "Ne mozes skinuti veci admin nivo."); //Provjera ako je igraÄev nivo manji od offline igraÄevog.
if(alevel == 0 && hlevel == 0) return SendErrorMessage(playerid, "Igrac nema poziciju."); //IgraÄ nije ni helper ni admin
mysql_format(Database, DB_Query, sizeof(DB_Query), "UPDATE `PLAYERS` set `ADMIN` = 0, `HELPER` = 0 WHERE `USERNAME` = '%s'", nick);
mysql_pquery(Database, DB_Query); //Update igraÄa
if(alevel > 0) AdminMessage(playerid, "Igracu %s ste offline oduzeli Admin nivo %d.", nick, alevel);
else if(hlevel > 0) AdminMessage(playerid, "Igracu %s ste offline oduzeli Helper nivo %d.", nick, hlevel);
}Obavezno! Na kraju svega moramo obrisati spremljeni cache, dakle na dnu komande, jednostavno brišemo gore spremljeni cache.
cache_delete(rezultat);Kako to izgleda sve zajedno:
mysql_format(Database, DB_Query, sizeof(DB_Query), "SELECT * FROM `PLAYERS` WHERE `USERNAME` = '%e' LIMIT 1", nick);
new Cache:rezultat = mysql_query(Database, DB_Query); //Spremanje cache-a
new rows;
cache_get_row_count(rows); //Provjera redova
if (rows) { //Provjera ukoliko raÄun postoji
new alevel, hlevel;
cache_get_value_int(0, "ADMIN", alevel); //Uzimanje admin nivoa igraÄu
cache_get_value_int(0, "HELPER", hlevel); //Uzimanje helper nivoa igraÄu
if(alevel > pInfo[ playerid ]) return SendErrorMessage(playerid, "Ne mozes skinuti veci admin nivo."); //Provjera ako je igraÄev nivo manji od offline igraÄevog.
if(alevel == 0 && hlevel == 0) return SendErrorMessage(playerid, "Igrac nema poziciju."); //IgraÄ nije ni helper ni admin
mysql_format(Database, DB_Query, sizeof(DB_Query), "UPDATE `PLAYERS` set `ADMIN` = 0, `HELPER` = 0 WHERE `USERNAME` = '%s'", nick);
mysql_pquery(Database, DB_Query); //Update igraÄa
if(alevel > 0) AdminMessage(playerid, "Igracu %s ste offline oduzeli Admin nivo %d.", nick, alevel);
else if(hlevel > 0) AdminMessage(playerid, "Igracu %s ste offline oduzeli Helper nivo %d.", nick, hlevel);
}
cache_delete(rezultat);Napomena: Moj kod vam copy-paste neće raditi, jer koristi neke moje defineove iz moda poput AdminMessage, SendErrorMessage, DB_Query i sliÄno, ali suÅ¡tina komande hoće, nemojte zaboraviti prilagoditi "ADMIN" i "HELPER" sa vaÅ¡im kolonama, iz vaÅ¡e MySQL baze.
Ako pronađete ikakve greške, pošto sam pisao odvojeno od mog moda radi lakšeg prilagođavanja drugima, samo mi javite da ispravim.
Komanda bi trebala raditi ispravno sa ovim kodom, jer kod mene radi odliÄan posao.
Underboss
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosAktivan Član
7 / 250 XP
Početnik(0)
535
Postovi:
50
Teme:
Pridružio se:Nov. 2013
12. Avg. 2018.
Ok je ali nemoj nikada koristiti SELECT * ukoliko ti to stvarno nije potrebno.(A to ti je najćeÅ¡Äe potrebno samo na loginu kada trebaÅ¡ uÄitati sve podatke).Jer SELECT * selektira sve "kolone" a ti ovdje koristiÅ¡ samo 3(admin,helper i username)
Umjesto ovoga:
Bi trebalo biti ovo:
Umjesto ovoga:
mysql_format(Database, DB_Query, sizeof(DB_Query), "SELECT * FROM `PLAYERS` WHERE `USERNAME` = '%e' LIMIT 1", nick);
new Cache:rezultat = mysql_query(Database, DB_Query); //Spremanje cache-a
Bi trebalo biti ovo:
mysql_format(Database, DB_Query, sizeof(DB_Query), "SELECT USERNAME,HELPER,ADMIN FROM `PLAYERS` WHERE `USERNAME` = '%e' LIMIT 1", nick);
new Cache:rezultat = mysql_query(Database, DB_Query); //Spremanje cache-a
Godfather
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
241 / 250 XP
Početnik(0)
2,043
Postovi:
83
Teme:
Pridružio se:Jan. 2014
13. Avg. 2018.
Paul Castellano wrote on August 12, 2018, 9:37 pm:
Ok je ali nemoj nikada koristiti SELECT * ukoliko ti to stvarno nije potrebno.(A to ti je najćeÅ¡Äe potrebno samo na loginu kada trebaÅ¡ uÄitati sve podatke).Jer SELECT * selektira sve "kolone" a ti ovdje koristiÅ¡ samo 3(admin,helper i username)
Umjesto ovoga:
Bi trebalo biti ovo:
Umjesto ovoga:
mysql_format(Database, DB_Query, sizeof(DB_Query), "SELECT * FROM `PLAYERS` WHERE `USERNAME` = '%e' LIMIT 1", nick);
new Cache:rezultat = mysql_query(Database, DB_Query); //Spremanje cache-a
Bi trebalo biti ovo:
mysql_format(Database, DB_Query, sizeof(DB_Query), "SELECT USERNAME,HELPER,ADMIN FROM `PLAYERS` WHERE `USERNAME` = '%e' LIMIT 1", nick);
new Cache:rezultat = mysql_query(Database, DB_Query); //Spremanje cache-a
Da, upravu si, bolje je selektovati ono što ćemo koristiti, iskoristio sam * (SVE), jer iskreno nisam znao što će ko selektovati, a nije mi palo na pamet da bih to mogao objasniti, hvala na ispravci.
Hvala svima 🙂
Kingpin
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
240 / 250 XP
Početnik(0)
1,394
Postovi:
77
Teme:
Pridružio se:Okt. 2012
13. Avg. 2018.
Nikada ne selektiraj sve sa * jer cak i ako imas kolone
id, name, email
SELECT *
&
SELECT id, name, email
Imaju razliku u brzini, cesto se primjeti na velikim tablicama ili na velikim joinima (znam iz iskustva)
Tako da dobra je praksa uvijek selektirati odredjene kolone
Ako vas zanima zasto je tu razlika, let me know, pa cu vam objasniti
id, name, email
SELECT *
&
SELECT id, name, email
Imaju razliku u brzini, cesto se primjeti na velikim tablicama ili na velikim joinima (znam iz iskustva)
Tako da dobra je praksa uvijek selektirati odredjene kolone
Ako vas zanima zasto je tu razlika, let me know, pa cu vam objasniti
Underboss
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
240 / 250 XP
Početnik(0)
731
Postovi:
29
Teme:
Pridružio se:Nov. 2016
13. Avg. 2018.
new rows;
cache_get_row_count(rows); //Provjera redova
if (rows) { //Provjera ukoliko raÄun postoji
mozes uraditi sa simple stockom koji imas uradjen vec u mysql datoteci
cache_num_rows
if(cache_num_rows() "znak(> < = ...)" 0)
Godfather
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosAktivan Član
9 / 250 XP
Početnik(1)
2,044
Postovi:
55
Teme:
Pridružio se:Sep. 2013
13. Avg. 2018.
Terzic wrote on August 13, 2018, 11:46 am:
new rows;
cache_get_row_count(rows); //Provjera redova
if (rows) { //Provjera ukoliko raÄun postoji
mozes uraditi sa simple stockom koji imas uradjen vec u mysql datoteci
cache_num_rows
if(cache_num_rows() "znak(> < = ...)" 0)
Isti djavo kada pogledas u kod
stock cache_num_rows()
{
new row_count;
cache_get_row_count(row_count);
return row_count;
}Underboss
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
240 / 250 XP
Početnik(0)
731
Postovi:
29
Teme:
Pridružio se:Nov. 2016
13. Avg. 2018.
.кÑундер wrote on August 13, 2018, 11:56 am:
Isti djavo kada pogledas u kod
stock cache_num_rows()
{
new row_count;
cache_get_row_count(row_count);
return row_count;
}O tome upravo i pricam, nema potrebe da pise opet isto dok ono stoji bzvz tamo
Morate biti prijavljeni da biste odgovorili na ovu temu.
Prijava