Trước tiên, bạn cần kiểm tra bảng
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)
Xem cách checkID
là lũy thừa của 2?
Trong ứng dụng của bạn nếu người dùng chọn 3-6
và 9-12
bạn gửi 2+8 = 10
cho db của bạn. Cũng sẽ rất tuyệt nếu bạn tạo hộp kiểm của mình bằng cách sử dụng thông tin db.
Trong db của bạn, bạn thực hiện so sánh bitwise để chọn các phạm vi phù hợp. Sau đó, điều chỉnh giữa các phạm vi.
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
Cùng nhau xem tất cả SQL Fiddle Demo
Tôi bao gồm nhiều người dùng hơn. Bạn chỉ phải thay đổi clausule where checkID & 10 > 0
để kiểm tra sự kết hợp khác.
LƯU Ý:
Tôi cập nhật các phạm vi. Thay đổi giá trị trên thành giá trị value - 1
bởi vì between
là bao gồm và có thể cho kết quả trùng lặp.
Nếu muốn sử dụng phiên bản cũ, bạn phải thay thế betwewen
trong câu nối thành
u.Experience >= r.low and u.Experience *<* r.upper