Ir para conteúdo
Fórum Script Brasil
  • 0

Posição de Um registro na tabela


ricardogs

Pergunta

Olá Pessoal,

Estou com um problema...

Tenho duas tabelas, uma delas tem o cadastro do participante (br800participantes) na outra os pontos que eles acumulam conforme suas vendas e ativações (br800pontos) com as vendas e ativações ele acumula pontos dependendo do valor acumulado.

O meu problema é o seguinte gostaria de saber qual a posição do participante na tabela, tipo se ele é o 1º ou 2º ou 100º ou 350º

existe algum comando direto no mysql que me da a posição do registro na tabela? não gostaria de fazer no asp porque vai ficar lento devido a quantidade de participantes...

olha como esta a tabela com as somas:

select distinct `abn`.`br800participantes`.`cenape` AS `cenape`,`abn`.`br800participantes`.`nome` AS `nome`,sum(`abn`.`br800pontos`.`venda`) AS `VENDAS`,sum(`abn`.`br800pontos`.`ativacao`) AS `ATIVACAO`,(sum(`abn`.`br800pontos`.`venda`) + sum(`abn`.`br800pontos`.`ativacao`)) AS `pontos` from (`abn`.`br800participantes` join `abn`.`br800pontos` on((`abn`.`br800participantes`.`cenape` = `abn`.`br800pontos`.`cenape`))) group by `abn`.`br800participantes`.`cenape`,`abn`.`br800participantes`.`nome`;

com este select que esta diretamente no banco de dados ele me dá o seguinte resultado:

cenape Nome vendas ativação pontos

54882 RAFAEL BATTELLA 420 10 430

54880 RICARDO GOMES DE SOUZA 421 9 430

54886 LUIS MASI 50 10 60

54887 BRUNO GEA 11 11 22

54881 RICARDO 2 10 10 20

54884 THEREZA 10 10 20

54885 ANA PAULA DUPONT 10 10 20

54883 ROBERTA 10 1 11

............ mas 300 registro daqui por diante

Como saber a posição de cada um?

logico que poderia contar pelo ASP, mas não vou mostar a posição dos outro para todos os participantes.

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Oi, 'ricardogs'!

O uso da cláusula ORDER BY não resolve seu problema?

SELECT DISTINCT part.cenape AS cenape, part.nome AS nome, SUM(pt.venda) AS VENDAS, SUM(pt.ativacao) AS `ATIVACAO`, SUM(pt.venda + pt.ativacao) AS pontos 
FROM abn.br800participantes part
JOIN abn.br800pontos pt  
ON part.cenape = pt.cenape 
GROUP BY part.cenape, part.nome
ORDER BY pontos DESC;

Link para o comentário
Compartilhar em outros sites

  • 0

Não era bem isso...

eu preciso saber a posição de cada pessoa na tabela... o order by eu vou usar para os que tem mais pontos.... ai ele fica em primero... isso beleza... mas e para saber a posição de um determinado participante se ele é o 10º ou 15º...

Editado por ricardogs
Link para o comentário
Compartilhar em outros sites

  • 0
Guest --ricardogs --
Não era bem isso...

eu preciso saber a posição de cada pessoa na tabela... o order by eu vou usar para os que tem mais pontos.... ai ele fica em primero... isso beleza... mas e para saber a posição de um determinado participante se ele é o 10º ou 15º...

Pessoal consegui fazer Rank pelo Mysql... deu um trampo mas tá rolando....

segue o exmplo na minha tabela:

select `a`.`cenape` AS `cenape`,`a`.`pontos` AS `pontos`,`a`.`campanha` AS `campanha`,(select (1 + count(0)) AS `count(*)` from `abn`.`br800pontostotal` `b` where ((`b`.`pontos` > `a`.`pontos`) and (`b`.`campanha` = 1))) AS `RANK` from `abn`.`br800pontostotal` `a` where (`a`.`campanha` = 1) order by `a`.`pontos` desc;

Link para o comentário
Compartilhar em outros sites

  • 0

Oi pessoal... toda aquela query é para criar um campo "ordinal"? isto é, um número sequencial que representa a posição do registro no resultado?

Olha só o jeito mais simples de se colocar em uma query, aliás, qualquer query, devidamente ordenada, um número ordinal:

select if((@row is null), @row:=1, @row := @row+1 ) as Ordinal, nome, municipio, uf
from clientes
order by nome;
Resultado:
+---------+---------+-------------------+----+
| Ordinal | nome    | municipio         | uf |
+---------+---------+-------------------+----+
|       1 | EDUARDO | PARAOPEBA         | MG |
|       2 | JOAO    | MATIAS BARBOSA    | MG |
|       3 | MARIA   | BELO HORIZONTE    | MG |
|       4 | PEDRO   | DUQUE DE CAXIAS   | RJ |
|       5 | ROBERTA | VITORIA           | ES |
|       6 | ZILDA   | JUAZEIRO DO NORTE | CE |
+---------+---------+-------------------+----+

O truque na expressão "if((@row is null), @row:=1, @row := @row+1 )" não deixa dúvidas quanto à capacidade do MySQL resolver questões complexas de forma bem simples não é?

Assim, ao "montar" a primeira linha do resultado, quando ela ainda é nula, atribuímos 1 à coluna, digamos, "virtual"... depois, o próprio MySQL se encarrega de incrementá-la...

E não importa o argumento do order by... veja que foi feita uma ordenação alfabética, mas poderia ter sido uma ordenação

numérica e até decrescente (uma lista de produtos mais vendidos começando pelos que vendem mais em valor, ou "curva abc")...

Ok?

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...