Pertama, Anda memerlukan tabel 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)
Lihat bagaimana checkID
adalah kekuatan 2?
Di aplikasi Anda jika pengguna memilih 3-6
dan 9-12
Anda mengirim 2+8 = 10
ke db Anda. Juga akan lebih bagus jika Anda membuat kotak centang menggunakan info db.
Di db Anda, Anda melakukan perbandingan bitwise untuk memilih rentang yang tepat. Kemudian lakukan antara dengan setiap rentang.
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
Lihat semuanya bersama-sama Demo SQL Fiddle
Saya menyertakan lebih banyak pengguna. Anda hanya perlu mengubah klausul where checkID & 10 > 0
untuk menguji kombinasi lainnya.
CATATAN:
Saya memperbarui rentang. Ubah nilai atas menjadi value - 1
karena between
inklusif dan dapat memberikan hasil duplikat.
Jika ingin menggunakan versi lama Anda harus mengganti betwewen
dalam kalimat gabung ke
u.Experience >= r.low and u.Experience *<* r.upper