Como selecionar entre os dois?
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?
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.