Eerst heb je een tabel checkRanges nodig
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)
Zie hoe checkID
zijn macht van 2?
Selecteer in uw app als gebruiker 3-6
en 9-12
je stuurt 2+8 = 10
naar je db. Het zou ook geweldig zijn als u uw selectievakje maakt met behulp van de db-info.
In je db vergelijk je bitsgewijze om de juiste bereiken te selecteren. Voer vervolgens de tussen uit bij elk bereik.
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
Bekijk het allemaal samen SQL Fiddle-demo
Ik neem meer gebruikers op. U hoeft alleen de clausule where checkID & 10 > 0
. te wijzigen om een andere combinatie te testen.
OPMERKING:
Ik werk de bereiken bij. Verander de bovenste waarde in value - 1
omdat between
is inclusief en kan dubbele resultaten opleveren.
Als u de oude versie wilt gebruiken, moet u de between
. vervangen in de voegzin voor
u.Experience >= r.low and u.Experience *<* r.upper