Najpierw potrzebujesz tabeli 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)
Zobacz, jak checkID
są potęgi 2?
W aplikacji, jeśli użytkownik wybierze 3-6
i 9-12
wysyłasz 2+8 = 10
do swojej bazy danych. Byłoby również świetnie, jeśli utworzysz pole wyboru za pomocą informacji o bazie danych.
W swojej bazie danych dokonujesz porównań bitowych, aby wybrać właściwe zakresy. Następnie wykonaj pomiędzy z każdym zakresem.
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
Zobacz to wszystko razem Pokaz SQL Fiddle
Uwzględniam więcej użytkowników. Musisz tylko zmienić klauzulę where checkID & 10 > 0
aby przetestować inną kombinację.
UWAGA:
Aktualizuję zakresy. Zmień górną wartość na value - 1
ponieważ between
jest inkluzywny i może dawać zduplikowane wyniki.
Jeśli chcesz używać starej wersji, musisz zastąpić between
w zdaniu dołączającym do
u.Experience >= r.low and u.Experience *<* r.upper