Først skal du bruge en tabel 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 hvordan checkID
er power of 2?
Hvis brugeren i din app vælger 3-6
og 9-12
du sender 2+8 = 10
til din db. Det ville også være fantastisk, hvis du opretter dit afkrydsningsfelt ved hjælp af db info.
I din DB laver du en bitvis sammenligning for at vælge de rigtige områder. Udfør derefter mellem med hvert område.
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 det hele sammen SQL Fiddle Demo
Jeg inkluderer flere brugere. Du skal kun ændre klausulen where checkID & 10 > 0
for at teste en anden kombination.
BEMÆRK:
Jeg opdaterer intervallerne. Skift den øvre værdi til value - 1
fordi between
er inkluderende og kan give dobbelte resultater.
Hvis du vil bruge den gamle version, skal du erstatte betwewen
i sammenføjningssætningen til
u.Experience >= r.low and u.Experience *<* r.upper