まず、テーブル 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
を送信します あなたのデータベースに。また、データベース情報を使用してチェック ボックスを作成すると便利です。データベースでは、正しい範囲を選択するためにビットごとの比較を行います。次に、各範囲でその間を実行します。
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 Demo をまとめてご覧ください より多くのユーザーを含めます。
where checkID & 10 > 0
句を変更するだけです。 他の組み合わせをテストします。注:
範囲を更新しました。上限値をvalue - 1
に変更しますbetween
だから 包括的であり、結果が重複する可能性があります。古いバージョンを使用したい場合は、
betwewen
を置き換える必要があります 結合文でu.Experience >= r.low and u.Experience *<* r.upper
プレ>