Domanda

Ho una tabella, chiamata Level.

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

Diciamo che ho 189 punti, come faccio a verificare in quale livello si trova l'utente?

MODIFICARE:

Migliore risposta scelta.Ora sto confrontando la richiesta aggiungendo EXPLAIN prima della query SELECT, ho questo risultato:

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

Come faccio a sapere quale è migliore o più veloce?

È stato utile?

Soluzione

Se stai cercando il livello in cui si trova attualmente il giocatore, seleziona il livello massimo con un requisito di punti inferiore ai punti attualmente posseduti dal giocatore:

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

Potrebbe funzionare meglio se ogni livello ha un file min_points E max_points quantità:

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

Quindi la tua query non avrebbe bisogno di essere aggregata:

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

Modificare:uff, stasera continuo a incasinare il mio SQL, LOL.

Altri suggerimenti

Ciò non richiederebbe un 'tra' o qualsiasi tipo di funzione di aggregazione a tutti .. si può solo selezionare tutte le righe che sono inferiori ai punti, decrescente, e quindi prima riga deve essere quella corretta.

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

(Supponendo MySQL .. se non si dispone di MySQL, 'limite' potrebbe non funzionare)

Non sono molto sicuro di quello che vuoi dire, ma penso che questo è ciò che si vuole:

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

Questo presuppone campo i 'punti' nella tabella sono i punti mininum ot raggiungere tale livello.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top