[Ajuda] Rank Mysql
#1

Bem, tentei fazer um rank em mysql aqui porйm nгo deu muito certo.

pawn Код:
CMD:rankteste(playerid)
{
    mysql_function_query(mysql_conexao, "SELECT `Score`,`Nick` FROM `contas` WHERE 1", true, "ScoreRank_Mysql", "i", playerid);//Obrigado 'Abravanel'
    return 1;
}
forward ScoreRank_Mysql(playerid);
public ScoreRank_Mysql(playerid)
{
    new rows, fields;
    cache_get_data(rows, fields, mysql_conexao);
    if(!rows) return SendClientMessage(playerid, -1, "{ff0000}Sem resultados..");
    new Ranking[5],
        Temp[50],
        Nomes[5][24], Temp2[24],
        Msg[800];
    for(new i; i < rows; i++) {
        cache_get_field_content(i, "Score", Temp, mysql_conexao);
        cache_get_field_content(i, "Nick", Temp2, mysql_conexao);
        if(strval(Temp) > Ranking[0]) {
            Ranking[0] = strval(Temp);
            format(Nomes[0], 24, Temp2); }
        if(strval(Temp) > Ranking[1] && Ranking[0] != strval(Temp)) {
            Ranking[1] = strval(Temp);
            format(Nomes[1], 24, Temp2); }
        if(strval(Temp) > Ranking[2] && Ranking[0] != strval(Temp) && Ranking[1] != strval(Temp)) {
            Ranking[2] = strval(Temp);
            format(Nomes[2], 24, Temp2); }
        if(strval(Temp) > Ranking[3] && Ranking[0] != strval(Temp) && Ranking[1] != strval(Temp) && Ranking[2] != strval(Temp)) {
            Ranking[3] = strval(Temp);
            format(Nomes[3], 24, Temp2); }
        if(strval(Temp) > Ranking[4] && Ranking[0] != strval(Temp) && Ranking[1] != strval(Temp) && Ranking[2] != strval(Temp) && Ranking[3] != strval(Temp)) {
            Ranking[4] = strval(Temp);
            format(Nomes[4], 24, Temp2); }
    }
    format(Msg, sizeof(Msg), "{a9c4e4}Resultado de Ranking\nOBS: {ffffff}Ranking estarб informando todos on/off.\n\n");
    for(new i; i < 5; i++)
        format(Msg, sizeof(Msg), "%s{ff0000}%iє {ffffff}> %s - Scores: {ffff00}%i\n", Msg, i+1, Nomes[i], Ranking[i]);
    ShowPlayerDialog(playerid, DialogNoResponse, DIALOG_STYLE_MSGBOX, "Ranking", Msg, "Fechar", "");
    return 1;
}
Estб ocorrendo um pequeno problema na ordem dos resultados.
Assim ocorre o resultado certo apenas uma vez.
Quando os resultados sгo alterados jб nгo funciona corretamente.
Reply
#2

Код:
SELECT `Scores` FROM `conta`
//
cache_get_field_content(i, "Score", Temp, mysql_conexao);
Sу pra constar tambйm, a coluna Nick nгo vai ser filtrada pois vocк nгo selecionou ela na consulta.
Reply
#3

Quote:
Originally Posted by Abravanel
Посмотреть сообщение
Код:
SELECT `Scores` FROM `conta`
//
cache_get_field_content(i, "Score", Temp, mysql_conexao);
Sу pra constar tambйm, a coluna Nick nгo vai ser filtrada pois vocк nгo selecionou ela na consulta.
Й, falta de atenзгo a minha.
Entгo, consegui arrumar o problema e o 'erro' no log foi resolvido.
Porйm a classificaзгo tб dando um problema estranho.

No primeiro teste, minha conta com mais scores apareceu.
Diminui os scores de minha conta atй que ficasse com menos da outra conta jб registrada.
Resultou que a minha conta nгo apareceu mais no ranking .-.
Reply
#4

Olha esse rank em MySQL e se baseia nele.
http://forum.sa-mp.com/showpost.php?...15&postcount=7

A parte mais importante do rank й esta:
order by level desc limit 10

Em traduзгo livre: ordenar por level decrescente com limite de 10 resultados.
Reply
#5

Quote:
Originally Posted by Abravanel
Посмотреть сообщение
Olha esse rank em MySQL e se baseia nele.
http://forum.sa-mp.com/showpost.php?...15&postcount=7

A parte mais importante do rank й esta:
order by level desc limit 10

Em traduзгo livre: ordernar por level decrescente com limite de 10 resultados.
Beleza, irei ver aqui.
Obrigado
Reply
#6

Nгo seria mais fбcil com ORDER BY?
Reply
#7

Quote:
Originally Posted by Abravanel
Посмотреть сообщение
Olha esse rank em MySQL e se baseia nele.
http://forum.sa-mp.com/showpost.php?...15&postcount=7

A parte mais importante do rank й esta:
order by level desc limit 10

Em traduзгo livre: ordernar por level decrescente com limite de 10 resultados.
Valeu fera, obrigado pelo help. +rep

Quote:
Originally Posted by zPain
Посмотреть сообщение
Nгo seria mais fбcil com ORDER BY?
To aprendendo ainda. .-.
Reply
#8

Quando tava aprendendo MySql tinha algumas duvidas que eu tirei elas ai ficou mais facil de se fecher com MySql..

quando vocк for fazer uma verificaзгo vocк sempre vai usar de uma forma clara idependente para o player que executou a function ou para todos.

EX:
PHP код:
 SELECT FROM `tabelaWHERE `name`='%s' AND `level`='%s'", nome , level 
Irar fazer igualmente com os players !

Como vocк ja tem seu servidor com uma media de players grande , vocк tem que fazer uma verificaзгo no login para inserir em sua database!

#Edit falto um where ali
Reply
#9

Quote:
Originally Posted by mau.tito
Посмотреть сообщение
Quando tava aprendendo MySql tinha algumas duvidas que eu tirei elas ai ficou mais facil de se fecher com MySql..

quando vocк for fazer uma verificaзгo vocк sempre vai usar de uma forma clara idependente para o player que executou a function ou para todos.

EX:
PHP код:
 SELECT FROM `tabela` `name`='%s' AND `level`='%s'", nome , level 
Irar fazer igualmente com os players !

Como vocк ja tem seu servidor com uma media de players grande , vocк tem que fazer uma verificaзгo no login para inserir em sua database!
Eu jб alterei o salvamento todo das contas dos players.
Eu apenas quis fazer um novo sistema de ranking.
Pois o que tб lб apenas faz o ranking com os players on.
Reply
#10

Vi que esse e uma publicaзгo meia antiga, mas to aprendendo o MySQL e sei que vocк poderia me ajudar vi esse rank mas ele tem erro certo? Queria uma ajuda sу pra fazer um tipo esse pois a GM eu jб conseguir passa pro SQL, se puder me ajudar fico grato, caso nгo possa fico tambйm. Kkk
Reply


Forum Jump:


Users browsing this thread: 4 Guest(s)