Първо се нуждаете от таблица 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)
Вижте как checkID
са степен на 2?
Във вашето приложение, ако потребителят избере 3-6
и 9-12
изпращате 2+8 = 10
към вашия db. Също така би било чудесно, ако създадете своето поле за отметка, като използвате информацията за db.
Във вашата база данни правите побитово сравняване, за да изберете правилните диапазони. След това извършете между тях с всеки диапазон.
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
Вижте всичко заедно Демонстрация на SQL Fiddle
Включвам още потребители. Трябва само да промените клаузата where checkID & 10 > 0
за да тествате друга комбинация.
ЗАБЕЛЕЖКА:
Актуализирам диапазоните. Променете горната стойност на value - 1
защото between
включва и може да даде дублиращи се резултати.
Ако искате да използвате старата версия, трябва да смените betwewen
в съединителното изречение към
u.Experience >= r.low and u.Experience *<* r.upper