_vina 0 Denunciar post Postado Maio 12, 2014 Boa tarde, eu tenho um campo em uma tabela chamado "pontos". existe uma forma que eu fazer uma comparação para saber a possição dele no rank comparando com as os outros pontos. ex:. time 1 - 10pontos time 2 - 20 pontos ae eu falo um "select * from tabela where id = time2", e ele me retorna o rank comparando com os outros times consigo fazer isso? att, Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Maio 12, 2014 Já vi questão semelhante sendo debatida aqui. As soluções para MySQL não são simples mas parecem possíveis, dê uma catada no Google (melhor que o procur https://www.google.com.br/search?q=imasters+forum+mysql+rank&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:pt-BR:official&client=firefox-a&channel=sb&gfe_rd=cr&ei=RAxxU_r3HqSk8weV0IHwBwar daqui). Compartilhar este post Link para o post Compartilhar em outros sites
_vina 0 Denunciar post Postado Maio 12, 2014 dei uma googlada e saiu algo mais ou menos assim SELECT uo.*, ( Select COUNT(DISTINCT ui.meta_value) FROM wp_postmeta as ui WHERE (ui.meta_value,ui.post_id) >= (uo.meta_value,uo.post_id) ) as rank FROM wp_postmeta as uo WHERE uo.post_id='671' and uo.meta_key = 'pontoscod' mas ele esta me retornando um rank errado =S Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Maio 12, 2014 Errado como ? Compartilhar este post Link para o post Compartilhar em outros sites
_vina 0 Denunciar post Postado Maio 12, 2014 a chamada SELECT uo.*, ( Select COUNT(DISTINCT ui.post_id) FROM wp_postmeta as ui WHERE (ui.meta_key = 'pontoscod' and ui.meta_value is not null) >= (uo.meta_key = 'pontoscod' and ui.meta_value is not null) ) as rank FROM wp_postmeta as uo WHERE uo.post_id='671' and uo.meta_key = 'pontoscod' retorno os valores da tabela SELECT meta_value,post_id FROM wp_postmeta WHERE meta_key = 'pontoscod' and meta_value is not null order by meta_value DESC Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Maio 12, 2014 Ué, você já tem o rank ? ============================= O que se precisa (creio) Contar os times e seus pontos Ordenar decrescente pelos pontos Incluir uma coluna do tipo contadora seguindo a ordem Tratar isto como uma tabela virtual Ler esta tabela virtual para se obter o rank do time ---------- Em Oracle vc tem as analytic functions , o rownum e outras facilidades para fazer isto, em MySQL não sei , mas já vi solucionarem isto aqui. Compartilhar este post Link para o post Compartilhar em outros sites
_vina 0 Denunciar post Postado Maio 12, 2014 Desculpe, a primeira coluna não é um RANK são os pontos que cada time tem. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Maio 12, 2014 Então você só precisa criar um sequencial , este é o rank. http://forum.imasters.com.br/topic/431020-pegar-posicao-em-ranking-do-usuario/#entry1774848 Compartilhar este post Link para o post Compartilhar em outros sites
_vina 0 Denunciar post Postado Maio 12, 2014 Motta desculpa te encher SELECT rank FROM (select @rownum:=@rownum+1 'rank', p.post_id, p.meta_key, p.meta_value from wp_postmeta p, (SELECT @rownum:=0) r WHERE meta_key='pontoscod' and meta_value is not null ORDER BY meta_value desc) m where m.post_id='671' and m.meta_key='pontoscod' and m.meta_value is not null Me retornou isso. fiz algo errado? acho que encontrei o problema a coluna não é do tipo numero =S resolvido SELECT rank FROM (select @rownum:=@rownum+1 'rank', p.post_id, p.meta_key, p.meta_value from wp_postmeta p, (SELECT @rownum:=0) r WHERE meta_key='pontoscod' and meta_value is not null ORDER BY cast(meta_value as unsigned) desc) m where m.post_id='671' and m.meta_key='pontoscod' and m.meta_value is not null Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Maio 13, 2014 Quem solucionou foi você !!! :) Compartilhar este post Link para o post Compartilhar em outros sites
_vina 0 Denunciar post Postado Maio 13, 2014 Eu fiz a primeira parte do ranking agora me veio uma outra duvida imagine que em uma equipe eu tenho 4 players e varias e equipes equipe 1 player 1 tem 6 pontos player 2 tem 4 pontos player 3 tem 12 pontos player 4 tem 2 pontos equipe 1 tem 24 pontos equipe 2 player 1 tem 6 pontos player 2 tem 4 pontos player 3 tem 10 pontos player 4 tem 2 pontos equipe 2 tem 22 pontos teria uma forma de eu somar os pontos dos players de uma certa equipe e gerar o ranking pela equipe? tipo select * where equipe = 2 retorno ranking 2 :innocent: Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Maio 13, 2014 Faça um agrupamento por equipe select equipe,sum(pontos) pontos from tabela group by equipe esta sql vira uma tabela virtual para ranquear as equipes. Compartilhar este post Link para o post Compartilhar em outros sites
_vina 0 Denunciar post Postado Maio 13, 2014 eu consigo fazer o group by passando um parametro? tipo select sum(meta_value) pontos from wp_usermeta WHERE meta_key='pontos' group by meta_key='equipe' Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Maio 13, 2014 select meta_key, sum(meta_value) pontos from wp_usermeta WHERE meta_key='pontos' and meta_key='equipe' group by meta_key Compartilhar este post Link para o post Compartilhar em outros sites
guidjos 65 Denunciar post Postado Maio 16, 2014 Cheguei à seguinte solução para o problema de ranking: select t.time, t.pontos, find_in_set(t.pontos, (select group_concat(distinct pontos order by 1 desc) from test)) from test t order by 3; Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Maio 16, 2014 :joia: Compartilhar este post Link para o post Compartilhar em outros sites