Pergunta

Eu tenho uma tabela, chamada de nível.

id  |  level  |  points(minimum)  
-------------------------
1   |  1      |  0 
2   |  2      |  100 
3   |  3      |  200 

Vamos dizer que tenho 189 pontos, como faço para verificar qual o nível do usuário em?

EDIT:

Melhor resposta escolhida. Agora eu estou comparando o pedido adicionando EXPLICAR antes da consulta SELECT, eu tenho esse resultado:

id  |  select_type  |  table  |  type  |  possible_keys  |  key  |  key_len  |  ref  |  rows  |  Extra
-------------------------------------------------------------------------------------------------------------
1   |    SIMPLE     |  level  |   ALL  |       NULL      |  NULL |    NULL   |  NULL |  8   |  Using where


id  |  select_type  |  table  |  type  |  possible_keys  |  key  |  key_len  |  ref  |  rows  |  Extra
-------------------------------------------------------------------------------------------------------------
1   |    SIMPLE     |  level  |   ALL  |       NULL      |  NULL |    NULL   |  NULL |  8   |  Using where; Using filesort

Como faço para saber qual é o melhor ou mais rápido?

Foi útil?

Solução

Se você está procurando o nível que o jogador está atualmente em, você quer selecionar o nível máximo com uma exigência pontos a menos que os pontos o jogador tem atualmente:

select max(level) from level where points <= 189;

Isso pode funcionar melhor se cada nível tem um min_points e max_points quantidade:

id | level | min_points | max_points
------------------------------------
1  |   1   | 0          | 99
2  |   2   | 100        | 199
3  |   3   | 200        | 299

Em seguida, sua consulta não teria necessidade de agregado:

select * from level where min_points <= 189 && max_points > 189;

Edit:. Ugh, eu continuo bagunçando meu SQL, esta noite, LOL

Outras dicas

Isso não exigiria um 'entre' ou qualquer tipo de função agregada em todos .. você poderia simplesmente selecionar todas as linhas que são menos do que os pontos, tipo descendente, e depois na primeira linha deve ser o correto.

select level from Level where points <= 189 order by points desc limit 1

(Assumindo MySQL .. se você não tem MySQL, 'limite' pode não funcionar)

Eu não tenho certeza do que você quer dizer, mas eu acho que isso é o que você quer:

SELECT `level` FROM `Level` WHERE `points`=189
select max(level) from level where points <= 189

Isso pressupõe campo os 'pontos' na tabela é os pontos mininum OT atingir esse nível.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top