sql >> Databasteknik >  >> RDS >> Sqlserver

TSQL för Filter Experience From Range multiselect

Först behöver du en tabell 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)

Se hur checkID är power of 2?

I din app väljer användaren 3-6 och 9-12 du skickar 2+8 = 10 till din db. Det skulle också vara bra om du skapar din kryssruta med hjälp av db info.

I din db gör du bitvis jämförelse för att välja rätt intervall. Utför sedan mellan med varje intervall.

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

Se allt tillsammans SQL Fiddle Demo Jag inkluderar fler användare. Du behöver bara ändra klausulen where checkID & 10 > 0 för att testa en annan kombination.

OBS:
Jag uppdaterar intervallen. Ändra det övre värdet till value - 1 eftersom between är inkluderande och kan ge dubbletter av resultat.

Om du vill använda den gamla versionen måste du ersätta betwewen i sammanfogningen till

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



  1. Använder pg_restore på dumpfil

  2. Installera psychopg2 på Ubuntu

  3. Hierarkisk rekursionsmeny med PHP/MySQL

  4. MYSQL skiljer mellan två kolumner även när den växlas