Ir para conteúdo

POWERED BY:

Arquivado

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

fake-2014

Como fazer um sistema de rank de posição

Recommended Posts

Pessoal, muitos sites fazem um rank comparando as medias de downloads de arquivos e montando um rank, indicando a posição atual e quantas posições o resultado subiu ou desceu.

um site que utiliza este método é o superdownloads para classificar e criar um rank dos arquivos mais baixados, veja a imagem abaixo

 

asas.png

 

Veja acima por exemplo o 15 do rank... neste caso é o software Avira e ele perdeu 2 posições em relação a contagem anterior... outro exemplo é o numero 11... neste caso o Ares... e nesse ele subiu 3 posições.

 

Gostaria então de saber como montar esse rank,

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade esses sites de downloads tem bastante informações sobre o download.

Ele tem uma tabela só para arquivos baixados, nesta tabela pode ser salva as as seguintes informações:

  • id
  • idSoftware
  • DataDownload
  • IpUsuario

E por ai vai, depois disso é só fazer um select básico para trazer as informações, neste select ele traz os dados desta semana e os da semana passada, ordena pelos mais baixados desta semana e apenas compara a posição do software nas duas semanas e calcula a diferença...

 

Não nada muito complexo, é até muito simples....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Roberto agradeço até o momento a sua contribuição, entendi perfeitamente a logica que vc me passou mais não sei coloca-las em pratica no mysql, poderia me ajudar com um exemplo?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha ficou esta estrutura para testes:

 

CREATE TABLE `downloads` (
  `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `idSoftware` bigint(20) unsigned NOT NULL DEFAULT '0',
  `dataDownload` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`ID`),
  KEY `idSoftware` (`idSoftware`),
  KEY `dataDownload` (`dataDownload`)
) ENGINE=InnoDB AUTO_INCREMENT=192422 DEFAULT CHARSET=utf8;


INSERT INTO `downloads` (`ID`,`idSoftware`,`dataDownload`) VALUES 
(1,1,'2013-12-20 17:58:18'),
(2,7,'2013-12-20 18:01:02'),
(3,9,'2013-12-27 18:17:13'),
(4,14,'2013-12-28 18:20:37'),
(5,112,'2013-12-26 18:45:37'),
(6,1878,'2013-12-23 11:00:21'),
(7,9, '2013-12-27 18:17:13'),
(8,9, '2013-12-21 18:17:13');

 

E aqui o select que traz todos os softwares na ordem da semana atual:

 

SELECT a.idsoftware, count(a.id) as qtde
FROM downloads a
where week(a.datadownload) = week(now())
group by a.idsoftware
order by qtde desc;

 

Ai você também executa este select para trazer os dados da semana anterior:

 

SELECT a.idsoftware, count(a.id) as qtde
FROM downloads a
where week(a.datadownload) = if (week(now()) = 0, week(concat(Date_Format(now(), '%Y') - 1, '-12-31')), week(now()))
group by a.idsoftware
order by qtde desc;

 

Dai então é só você comparar a posição dos software nesta semana e na semana anterior e subtrair ((Pos_seman_atual - Pos_seman_ant) * -1) ai ele te retorna a diferença desta semana e da semana passada...

Mas isso tem que ser feito na sua linguagem... Pelo menos eu não conheço nenhum método pra fazer isso via sql...

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.