Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

_vina

Ranking

Recommended Posts

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

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

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

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

8JIM2.png

 

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

8JJfh.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

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?

8JSLX.png

 

acho que encontrei o problema a coluna não é do tipo numero =S

 

8JTiO.png

 

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

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

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

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


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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.