Ir para conteúdo

POWERED BY:

Arquivado

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

William Phantom

Descobrir posição no ranking

Recommended Posts

Olá pessoal!

eu tenho as seguintes tabelas: pontos|galleries

 

pontos:

id_gallery|data

 

galleries:

id|title

 

fiz esse script que mostra o total de pontos

$ranking = "SELECT m.title, COUNT(*)as ranking FROM pontos p INNER JOIN  galleries m  ON p.id_gallery=m.id GROUP BY (p.id_gallery) ORDER BY ranking DESC";
$query = mysql_query($ranking)or die(mysql_error());
$i = 1;
while($row = mysql_fetch_array($query))
{
	echo $i.'º - ';
	echo $row['title'].' - ';
	echo $row['ranking'].'pts<br />';
	$i++;
	}

mas eu queria colocar o rank na single, ou seja fazer uma busca pelo id da galeria e pegar rank.

 

tentei de várias formas, mas não conseguir achar a lógica certa

 

desde já agradeço muito

Compartilhar este post


Link para o post
Compartilhar em outros sites

to brisando aqui e pensei numa coisa.

 

seleciona o usuário, depois ve quantos pontos ele tem, depois busca na tabela todos os resultados onde o nr de ponto é menor ou igual o ponto do usuário e conta quantos registros voltaram.

 

\o/

 

isso funciona, falta aplicar

Compartilhar este post


Link para o post
Compartilhar em outros sites

nestante eu vou tentar fazer isso, agora eu vou ter que sair aqui :)

 

 

fiz um SQL que faz exatamente oque me disse, só que acusa o erro:

 

 

Unknown column 'points' in 'where clause'

 

tentei resolver só que não consegui sozinho U.U

esse é o código SQL que estou usando:

$pontos = $row['ranking'];

"SELECT *, COUNT(p.id_gallery)as points		FROM galleries m 		INNER JOIN pontos p ON m.id=p.id_gallery 		WHERE points > '$pontos'		GROUP BY (p.id_gallery)		ORDER BY points DESC";

obs: quando tiro o WHERE ela retorna todos os resultados encontrados, e não isso que eu quero

Compartilhar este post


Link para o post
Compartilhar em outros sites

o problema é o seguinte,

eu fiz como o Vinicius Rangel, sugeriu ali em cima, só que quando eu tento colocar o WHERE pra selecionar apenas as colunas que tiverem pontos maior o $pontos (ou seja básicamente a classificassão na tabela) ele dar error

 

acho que é porque, a coluna points não existe realmente. mas será que tem como contornar?

estou usando o "COUNT(p.id_gallery)as points" para contar quantos pontos cada galeria tem

 

 

simplificado: preciso usar o WHERE para selecinar apenas registros, quais os points(gênerica) forem maior que $pontos

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas eu queria colocar o rank na single

não entendo o que seria isto ...

 

 

to brisando aqui

nem isto

 

Culpa minha, mas vamos lá , esta quey abaixo acha os p.id_gallery que tenham 5 ou mais pontos (ocorrências na tabela pontos), 5 poderia ser um paramêtro.

SELECT p.id_gallery, COUNT(p.id_gallery) as points 
FROM galleries m INNER JOIN pontos p ON m.id=p.id_gallery 
GROUP BY (p.id_gallery) 
HAVING COUNT(p.id_gallery) > 5 --aqui pode ser um parametro. 
ORDER BY 2 DESC

 

ou seja fazer uma busca pelo id da galeria e pegar rank.

 

Por isto entendo

SELECT COUNT(p.id_gallery) as points 
FROM galleries m INNER JOIN pontos p ON m.id=p.id_gallery 
WHERE p.id_gallery = 1234

ou seja, os pontos da p.id_gallery 1234

 

Espero ter ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então motta, o que ele quer é que tipo quando o usuário entrar no perfil aparecer lá.

você esta na posição 43..

 

e o que disse que tava brisando é que enquanto lia tive essa epifania ai que é meio um gato mas deve funcionar.

 

Willian, posta seu código pra dar uma olhada.

eu criei um tópico por que estava com dúvidas para trabalhar com colunas criadas a partir de cálculo da consulta e o Motta conseguiu resolver, essa seria sua solução também.

 

posta o select que você tentou

Compartilhar este post


Link para o post
Compartilhar em outros sites

desculpe a demora, tive que formatar meu PC pois o mysql parou de funcionar

é o seguinte meu problema não é bem a query pois ela deveria funcionar (na teoria)
só que não existe uma tabela "pts" ( "pts" é um resultado de um COUNT() ), por isso não consegui usa-la no WHERE

WHERE pts > $pontos


então percebi que meu problema está na modelagem mesmo,
eu deveria criar um tabela com "pts"
e contar os pontos lá, ao invés de uma tabela com os registros como pontos

então qual melhor forma de fazer um rank?

1º tabela: ranking (1:1)
id | pontos | colocacao | update

ou

2º tabela: ranking (esse seria 1:N)
id | data

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso seria básicamente um sistema de ranking feito com mysql,

porém eu quero fazer um rank individual, ou seja pegar apenas o rank de um resultado separadamente em relação aos outros

 

exemplo: Está pagina está em 5º lugar

exemplo2: Está pagina está em 19 lugar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, pegue a sql que gera o ranking e leia como uma tabela virtual ...

 

 

 

Select *

 From ( Select do rank ) 

Where rank = 5

Compartilhar este post


Link para o post
Compartilhar em outros sites

é isso, não tenho uma tabela rank, só uma tabela com onde cada registro vale um ponto

tabela: ranking (esse seria 1:N)
id | data

 

percebi que dessa forma eu não consigo fazer, então pensei em colocar assim

 

tabela: ranking (1:1)
id | pontos | colocacao | update(data da ultima atualizaçao)

 

apenas uma tabela com o total, que ficaria bem mais fácil de manusear

 

ou então assim:

 

tabela pontos: (1:N)

id | data | usuario | ip

 

tabela ranking (onde vai contar o total dos pontos da tabela anterior) (1:1)

id | pontos | colocacao

 

ou seja duas tabelas, uma com os pontos separados e outra com o total para fazer o ranking

 

oque você acha?

 

caso a #2:

 

Qual a melhor forma de atualizar esses dados?

exemplo: Crontab (automatico)

exemplo2: A cada consulta

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma trigger teria de atualizar esta tabela ou uma procedure teria de fazer isto.

Eu faria uma VIEW para saber o ranqueamento.

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.