sql >> Databáze >  >> RDS >> Sqlserver

TSQL pro filtrování zkušeností z vícenásobného výběru

Nejprve potřebujete tabulku 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)

Podívejte se, jak checkID jsou mocniny 2?

Pokud uživatel ve vaší aplikaci vybere 3-6 a 9-12 odešlete 2+8 = 10 do vaší db. Také by bylo skvělé, kdybyste vytvořili zaškrtávací políčko pomocí db info.

Ve své databázi provádíte bitové porovnávání, abyste vybrali správné rozsahy. Poté proveďte mezi jednotlivými rozsahy.

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

Podívejte se na to všechno dohromady Ukázka SQL Fiddle Zahrnuji více uživatelů. Stačí změnit klauzuli where checkID & 10 > 0 otestovat jinou kombinaci.

POZNÁMKA:
Aktualizuji rozsahy. Změňte horní hodnotu na value - 1 protože between je inkluzivní a může poskytovat duplicitní výsledky.

Pokud chcete použít starou verzi, musíte nahradit between ve větě spojení s

u.Experience >= r.low and u.Experience *<* r.upper



  1. PHP vazba 'bigint' datový typ (připravený příkaz MySQLi)

  2. heroku:vztah auth_group neexistuje

  3. Seskupit podle max(času) mysql

  4. Jak funguje SQLite Length()