Först behöver du en tabell 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)
Se hur checkID
är power of 2?
I din app väljer användaren 3-6
och 9-12
du skickar 2+8 = 10
till din db. Det skulle också vara bra om du skapar din kryssruta med hjälp av db info.
I din db gör du bitvis jämförelse för att välja rätt intervall. Utför sedan mellan med varje intervall.
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
Se allt tillsammans SQL Fiddle Demo
Jag inkluderar fler användare. Du behöver bara ändra klausulen where checkID & 10 > 0
för att testa en annan kombination.
OBS:
Jag uppdaterar intervallen. Ändra det övre värdet till value - 1
eftersom between
är inkluderande och kan ge dubbletter av resultat.
Om du vill använda den gamla versionen måste du ersätta betwewen
i sammanfogningen till
u.Experience >= r.low and u.Experience *<* r.upper