Vous avez d'abord besoin d'une table 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)
Découvrez comment checkID
sont puissance de 2 ?
Dans votre application, si l'utilisateur sélectionne 3-6
et 9-12
vous envoyez 2+8 = 10
à votre bd. Ce serait également formidable si vous créez votre case à cocher en utilisant les informations de la base de données.
Dans votre base de données, vous effectuez une comparaison au niveau du bit pour sélectionner les bonnes plages. Ensuite, effectuez l'entre avec chaque plage.
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
Voir tout ensemble Démo SQL Fiddle
J'inclus plus d'utilisateurs. Vous n'avez qu'à changer la clause where checkID & 10 > 0
pour tester une autre combinaison.
REMARQUE :
Je mets à jour les gammes. Remplacez la valeur supérieure par value - 1
car between
est inclusif et pourrait donner des résultats en double.
Si vous voulez utiliser l'ancienne version, vous devez remplacer le between
dans la phrase jointe à
u.Experience >= r.low and u.Experience *<* r.upper