Criar ranking dos usuários [RESOLVIDO]

1. Criar ranking dos usuários [RESOLVIDO]

Rodrigo Kulb
rodrigokulb

(usa Ubuntu)

Enviado em 05/01/2011 - 00:49h

Ola estou efetuando algumas alterações no portal http://1link.com.br , hoje já possue uma lógica de pontos para os membros, gostaria de informar qual é o ranking atual de cada membro, igual o Fábio fez http://www.vivaolinux.com.br .

Qual a melhor forma de fazer isso sem sobrecarregar muito o banco de dados (utilizo mysql e php)?

desde já agradeço.


  


2. MELHOR RESPOSTA

Perfil removido
removido

(usa Nenhuma)

Enviado em 05/01/2011 - 19:57h

Bem se entendi você quer saber quando fazer o select para poupar processamento...

Bem... Você pode fazer o select quando o usuario fazer o login e guardar na tabela de usuários logados e só atualizar em um novo login.

Mas acho melhor guardar este valor no cookie de sessão dele e só atualizá-lo em um nova sessão ou ainda para este caso e o anterior da tabela; quando um intervalo de tempo ( tipo 1 hora ) for atingido.

<?php
/**
* @file getRanking.inc.php
* Recebe a identificação de um usuário e retorna o seu ranking.
*
* @author Paulo Riceli Dias Lelis
* @more http://pauloriccelli@blogspot.com
*
* @param string
* @return int
**/
function _getRanking( $user_id = null )
{
$sql = 'SELECT
`usuario`, `pontos`
FROM
`usuarios` ORDER BY `pontos` DESC';
$query = mysql_query( $sql );
// inicia o contador
$cont = 0;

while( $rows = mysql_fetch_row( $query ) )
{
$cont++;
if( "$rows['0']" === "$user_id" )
{
return $cont;
}
}
}
?>



Em uma tela com múltiplos rankings a serem mostrados você poderia usar a rotina acima para cada id encontrada. Eg.


<?php
// um possível trecho de código que mostra uma tela com muitos rankings:

while( $rows = mysql_fetch_array( $query_pagina ) )
{
$ranking = _getRanking( $rows['id'] );
echo $rows['nome'] . ' ranking ' . $ranking ;
}
?>


Caso não tenha entendido retorne-nos sua duvida por favor. Temos certeza que poderemos lhe ajudar.
Nota: Os códigos acima apesar de funcionais estão intratados( toscos ).



3. Re: Criar ranking dos usuários [RESOLVIDO]

Alan Souza
alan-souza

(usa Slackware)

Enviado em 05/01/2011 - 13:28h

Se você já fez o sistema de pontos para ser somando no banco, basta você, após isso, fazer um select decrescente.


4. Qual será a melhor forma ?

Rodrigo Kulb
rodrigokulb

(usa Ubuntu)

Enviado em 05/01/2011 - 14:30h

Qual será a melhor forma ?

- Efetuando um select toda vez, na base inteira de membros para saber o ranking de 1 membro ?

- Existe um forma de efetuar este select e somente retornar este valor de ranking ?

Pois acredito que aqui no VOL a atualização de ranking é online, não roda em um script cron.

seu estou sendo chato mais quero saber a melhor forma...

agradeço desde novamente pela ajuda.




5. Re: Criar ranking dos usuários [RESOLVIDO]

Alan Souza
alan-souza

(usa Slackware)

Enviado em 05/01/2011 - 14:57h

Precisa de um while na parada. Segue este modelo aqui:
http://tinyurl.com/2fd6tr3


6. Melhor forma então

Rodrigo Kulb
rodrigokulb

(usa Ubuntu)

Enviado em 05/01/2011 - 20:32h

No fundo gostaria de saber como o Fábio fez no VOL...

Bom, pelo que eu entendi, acho que a melhor forma é SELECT da base TODA, como nossos amigos acima, 3 vezes ao dia, agendado no crontab, gravar o valor de todos usuários na tabela users, assim evito o alto tráfego pela web e processador do servidor mysql.

gostaria de agradecer ao @ronin @alan-souza e aos demais que tiverem novas/melhores soluções.


7. Re: Criar ranking dos usuários [RESOLVIDO]

Alan Souza
alan-souza

(usa Slackware)

Enviado em 05/01/2011 - 21:26h

Acho que o Fábio está de férias, pois o site está bem parado na questão de aprovação de artigos e outras atualizações. Mas, creio que se ele chegar a ver este tópico ele, com certeza, irá lhe passar como é funcionamento do ranking do VOL.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts