/ / Encontrar posição de um registro particular - ranking / asp classic / mysql - mysql

Encontre a posição de um registro em particular - ranking / asp classic / mysql - mysql

Eu tenho uma tabela no meu banco de dados contendo vários registros. Eu preciso saber como identificar em qual posição registro foi recentemente colocado, fazer um sistema de ranking e um posição de acordo com a pontuação.

Exemplo, eu tenho os seguintes registros no banco de dados

user-01 / 100 points
user-02 / 88 points
user-03 / 55 points
user-04 / 11 points
user-05 / 30 points

Com isso eu gostaria de saber em qual lugar é usuário-03, aqui é o terceiro, o que devo fazer para o sistema me mostrar esse posicionamento?

Obrigado!

Respostas:

1 para resposta № 1

Você pode criar uma coluna de número de linha no seu conjunto de resultados. Para inicializar a variável, JOIN para uma pseudo-tabela que apenas define sua variável para 0 - caso contrário, você teria que SET de antemão - exigindo uma declaração extra.

Para demonstrar:

mysql> CREATE TABLE scores (user VARCHAR(10), score INT);
Query OK, 0 rows affected (0.08 sec)

mysql> INSERT INTO scores
-> VALUES ("user1", 10),
-> ("user2", 20),
-> ("user3", 30);
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> SELECT user, score, @rownum := @rownum + 1 AS rank
-> FROM scores
-> JOIN (SELECT @rownum := 0) rownum
-> ORDER BY score DESC;
+-------+-------+------+
| user  | score | rank |
+-------+-------+------+
| user3 |    30 |    1 |
| user2 |    20 |    2 |
| user1 |    10 |    3 |
+-------+-------+------+
3 rows in set (0.00 sec)

0 para resposta № 2

Eu tive um problema semelhante, mas estava tendo esse tipo de linha "user-03" repetindo várias vezes. E também eu estava usando duas tabelas.

Estrutura das tabelas:

Tabela de pontuação [score float, uid int, timestamp datetime] Tabela de Usuários [username varchar (500), id int, etc ...]

O critério para classificação foi listar os usuários com base nas pontuações máximas. Então modifiquei a consulta usando grupo por e JUNTE-SE na consulta sql conforme indicado abaixo.

Sistema de Ranking.

SELECT *, @rownum:=@rownum+1 as rank
FROM (
select  MAX(s.score) as score,u.username as username
from scorelog s join userdb u on s.uid=u.id
group by s.uid
order by MAX(s.score) desc
) user_rank, (SELECT @rownum:=0) r

Para identificar a posição da linha individual e sua classificação no banco de dados, use a consulta abaixo. o

SELECT *
FROM ( SELECT *, @rownum:=@rownum+1 as rank
FROM (
select  MAX(s.score) as score,
u.username as username,
s.uid as uid,s.
timestamp as timestamp
from scorelog s join userdb u on s.uid=u.id
group by s.uid order by MAX(s.score) desc
) user_rank, (SELECT @rownum:=0) r
)t where username = "johndoe"

Consulte também os recursos abaixo de stackoverflow, que fornecem uma solução semelhante.

consultando a classificação do usuário em tabelas um-para-muitos

Solução de classificação SQL

Resultado da consulta PHP MYSQL "RANKING"