Ir para conteúdo

POWERED BY:

Arquivado

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

Priscila Thompson

Ranking por pontuação e data

Recommended Posts

Olá pessoal,Fiz um sistema de quiz e estou tendo problemas com ordenação de resultados por total de pontos e data e hora. A minha estrutura de tabelas está assim:CREATE TABLE `tbl_participaquiz` ( `id_userquiz` int(10) NOT NULL, `id_quiz` int(10) NOT NULL, `acerto` int(2) NOT NULL, `data_hora` timestamp NOT NULL default '0000-00-00 00:00:00' on update CURRENT_TIMESTAMP) ENGINE=MyISAM DEFAULT CHARSET=latin1;CREATE TABLE `tbl_quiz` ( `id_quiz` int(10) unsigned NOT NULL auto_increment, `titulo` varchar(255) NOT NULL, `resposta1` varchar(255) NOT NULL, `resposta2` varchar(255) NOT NULL, `resposta3` varchar(255) NOT NULL, `respostacerta` int(10) NOT NULL, PRIMARY KEY (`id_quiz`)) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;CREATE TABLE `tbl_userquiz` ( `id_userquiz` int(10) unsigned NOT NULL auto_increment, `nome` varchar(50) NOT NULL, `apelido` varchar(20) NOT NULL, `id_setor` int(2) NOT NULL, `email` varchar(50) NOT NULL, `senha` varchar(40) NOT NULL, `total_pontos` int(10) NOT NULL, PRIMARY KEY (`id_userquiz`)) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=52 ;Quando o usuário responde o quiz, ele se loga e, além de criar mais uma linha na tabela tbl_participaquiz com a participação dele (assumindo 0 para resposta errada e 1 para resposta certa em "acerto") o sistema soma +1 ou não (dependendo se acertou ou não) em "total_pontos" na tabela tbl_userquiz.Bem, o meu problema está em fazer o ranking total dos usuários. No caso, teríamos que ordenar não só por total de pontos(já que existe muito empate), mas também por "quem respondeu primeiro" mais vezes.O select que eu fiz não está retornando certo... ele só tá pegando quem respondeu primeiro no primeiro quiz... e não fazendo uma média geral dos quizes...O select vai abaixo:

SELECT		tu.id_userquiz, tu.total_pontos	FROM 		tbl_participaquiz tp,		tbl_userquiz tu,		tbl_setor ts	WHERE		tu.id_setor=ts.id_setor		AND tp.id_userquiz=tu.id_userquiz		AND tp.acerto='1'	GROUP BY		tu.id_userquiz	ORDER BY		tu.total_pontos desc,		tp.data_hora asc limit 0,5

Alguém tem alguma idéia?[]´sPriscila

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usar a soma do tempo usado em segundos deve ajudar, o que acha?

 

SELECT		tu.id_userquiz, tu.total_pontos, sum(time_to_sec(time(tp.data_hora))) tempo	FROM		tbl_participaquiz tp,		tbl_userquiz tu,		tbl_setor ts	WHERE		tu.id_setor=ts.id_setor		AND tp.id_userquiz=tu.id_userquiz		AND tp.acerto='1'	GROUP BY		tu.id_userquiz	ORDER BY		tu.total_pontos desc,		tempo asc limit 0,5

Parece funcionar para o que deseja.

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.