Per prima cosa hai bisogno di una tabella checkRanges
CREATE TABLE checkRanges
([checkID] int, [name] varchar(8), [low] int, [upper] int);
INSERT INTO checkRanges
([checkID], [name], [low], [upper])
VALUES
(1, '0-3', 0, 2),
(2, '3-6', 3, 5),
(4, '6-9', 6, 8),
(8, '9-12', 9, 11),
(16, '12+', 12, 999)
Guarda come checkID
sono potenza di 2?
Nella tua app se l'utente seleziona 3-6
e 9-12
invii 2+8 = 10
al tuo db. Sarebbe anche fantastico se crei la tua casella di controllo usando le informazioni db.
Nel tuo db fai il confronto bit per bit per selezionare gli intervalli giusti. Quindi esegui il mezzo con ogni intervallo.
WITH ranges as (
SELECT *
FROM checkRanges
where checkID & 10 > 0
)
SELECT *
FROM users u
inner join ranges r
on u.Experience between r.low and r.upper
Guarda tutto insieme Demo SQL Fiddle
Includo più utenti. Devi solo cambiare la clausola where checkID & 10 > 0
per testare un'altra combinazione.
NOTA:
Aggiorno gli intervalli. Cambia il valore superiore in value - 1
perché between
è inclusivo e potrebbe fornire risultati duplicati.
Se vuoi usare la vecchia versione devi sostituire il between
nella frase unisci a
u.Experience >= r.low and u.Experience *<* r.upper