Create table matchs
(
master_idx int,
str_idx int,
str_type int
)
insert into matchs values (1,124,1);
insert into matchs values (1,124,2);
insert into matchs values (1,129,3);
insert into matchs values (1,129,1);
insert into matchs values (2,129,2);
insert into matchs values (2,129,4);
insert into matchs values (2,129,5);
insert into matchs values (3,135,4);
insert into matchs values (3,135,5);
insert into matchs values (4,135,1);
-----------------------------------------------------------
select
master_idx,count (*) as rank from matchs
where str_idx in(124,129)
group by master_idx
order by rank desc
위와 같은 결과를 얻게 됩니다.
그러나 이러한 결과가 아니라 아래의 결과가 필요합니다.
왜 master_idx 1의 랭킹이 2가 되느냐...
str_idx가 검색시 2개를 입력했기때문에
str_idx값에 해당하는 값이 있을때 1씩 증가하는것입니다.
그러므로 소속된 값은 4개이지만 str_id가 같은것은 한 그룹으로
보기때문에 랭킹은 2가 되는것이죠
조금더 발전된 형태로
master_idx |
rank |
ext |
1 |
2 |
11000 + 10100 |
2 |
1 |
01011 |
ext에는 입력받은 str_id에 따라 위치값을 담고 있습니다.
master_idx가 1인것의 ext를 보았을때
11000은
insert into matchs values (1,124,1);
insert into matchs values (1,124,2);
때문에 그리 만들어진 것입니다.
총 5자리(고정)중 위치를 포함하고 있는 str_type값에 의해 on,off되어
0또는 1로 값이 표현됩니다.
거기에 master_idx 가 같지만 str_idx가 다른 그룹이 또
존재하는데
insert into matchs values (1,129,3);
insert into matchs values (1,129,1);
때문에 + 10100 이 추가 되었습니다.
검색대상의 갯수가 늘어나면
예를들어 4개의 str_idx 로 검색을 하게 된다면
ext는 11000 + 10100 + 00001 + 01000
형태로 늘어나게 됩니다.
실제로 더해져도 상관없습니다.
이 쿼리가 가능할까요?
아니면 위의 중간 단계의 쿼리는 가능할까요?
|