Zuerst brauchen Sie eine Tabelle 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)
Sehen Sie, wie checkID
sind Potenzen von 2?
Wenn der Benutzer in Ihrer App 3-6
auswählt und 9-12
Sie senden 2+8 = 10
zu deiner db. Es wäre auch toll, wenn Sie Ihr Kontrollkästchen mit den DB-Informationen erstellen.
In Ihrer db führen Sie einen bitweisen Vergleich durch, um die richtigen Bereiche auszuwählen. Führen Sie dann mit jedem Bereich das Zwischen durch.
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
Sehen Sie alles zusammen SQL Fiddle Demo
Ich schließe mehr Benutzer ein. Sie müssen nur die Klausel where checkID & 10 > 0
ändern andere Kombination zu testen.
HINWEIS:
Ich aktualisiere die Bereiche. Ändern Sie den oberen Wert in value - 1
weil between
ist inklusive und könnte doppelte Ergebnisse liefern.
Wenn Sie die alte Version verwenden möchten, müssen Sie den between
ersetzen im Join-Satz zu
u.Experience >= r.low and u.Experience *<* r.upper