Select Banco SQL Server 2005

9 respostas
A

Boa tarde,

Sou programador junior java web em struts, estou com uma duvida, tenho uma tabela de usuarios, com os campos nome e pontos.
Em uma pagina ele traz uma lista com os top 10(com mais pontos)

SELECT TOP 10 * FROM usuarios ORDER BY pontos DESC

Na mesma pagina tem um input onde o usuario pode digitar um nome e trazer em que colocação este nome esta na classificação geral.
Tem mais de 25.000 linhas na tabela. Penso de qual maneira pratica e de desempenho posso fazer isto.
Aceito ideias.

9 Respostas

Andre_Fonseca

Oi,

Eu traria todos, sem usar o TOP, colocaria em um HashMap usando pontos como chave e nome como valor

A

Esse top 10 é só para montar uma tabela com os top
dai em cima tem um input onde o usuario pode digitar um nome
e em cima dessa tabela com os top 10 vai aparecer uma linha com o nome do usuario digitado

posição | nome | pontos
Ex.:

17212º | Joao da Silva | 5210 Pontos

aki em baixo tem a tabela usando aquela linha com o TOP 10

T

A palavra mágica para o Google é “RANK”.

Veja o que ele me respondeu.

http://www.databasejournal.com/features/mssql/article.php/3661461

Veja a partir de “RANK Function” nesse artigo.

A

Estou no trabalho internet só liberada para os principais sites de programação
quando eu chega em casa eu vejo
vlw ai

A

Conversei com meu colega aqui do lado, disse que essa função “RANK” não serve pra trazer só 1 resultado.
o TOP 10 ali em cima ta blz ele cria uma tabela dos 10 primeiros, mais meu problema é o usuario digitar o nome e
dizer qual a posição dele em relação aos outros

T

O RANK não traz apenas um resultado (é claro - você não viu a documentação da Microsoft? )

Você precisa URGENTEMENTE de instalar o SQL Server Books Online na sua máquina, já que lhe proíbem de olhar a Internet), mas você precisa pegar o RANK (que já dá 99,5% do seu trabalho) e criar um select um pouco mais complexo, simplesmente para mostrar o rank.

Ou você tem preguiça de escrever queries SQL?

A

mais eu só quero que traga 1 resultado, com rank não tem como fazer isso
não quero que traga os 100 melhores quero entrar com os dados(nome) e ele me trazer a posição desse nome no meio desses 100 que estão no ranking

ceccone

Tenta algo assim:

select usu1.Posicao, usu2.*
from (select RANK() OVER (order by pontos desc) as Posicao, * from usuarios ) usu1
inner join usuarios usu2
ON usu1.nome = usu2.nome
WHERE usu2.nome like ‘%Manoel%’

Isso assumindo que o campo usuarios.nome seja tanto o nome do usuário quanto a chave da tabela.

A

Obrigado, exatamente isso que eu estava atraz,

Valeu mesmo! :smiley:

Criado 15 de setembro de 2008
Ultima resposta 16 de set. de 2008
Respostas 9
Participantes 4