‘알 수도 있는 친구’ 페이지를 리프래쉬하다보니 과연 어떤 쿼리를 사용했을까가 궁금해졌다.
자 우선 기본적으로 ‘사람 정보’ 테이블이 다음과 같다고 하고…
person(pid, ‘이름’ )
‘친구 정보’ 테이블이 다음과 같다고 하면 (pid1: 어떤 사람의 pid, pid2: pid 를 가지는 사람의 친구)
relation(rid, pid1, pid2)
다음과 같은 쿼리면 되려나…
select pid2, count(pid2) as score from relation where pid1 IN (select pid2 from relation where pid1=’pid’) AND pid2 NOT IN (select pid2 from relation where pid1=’pid’) group by pid2 order by score desc;
자기 친구의 친구면서, 자기의 직접적인 친구는 아닌 사람들에 대해 얼마나 많은 (내 직접적인) 친구들이 그 사람을 함께 알고 있는 지 정보를 이용하여 정렬하기~! 정도?
왠지 테스트해보지도 않았고, 문법에 맞는지도 확실히 몰겠지만 왠지 될거 같다. 흐흣~!
찌질찌질…
조금 걸리는 건 똑같은 쿼리가 서브쿼리로 두 군데 들어갔다는 건데, 과연 쿼리 옵티마이져에서 저 둘을 같은 것으로 인식시켜줄까? 아니면 저 쿼리가 두 번 실행되는 걸까…
두 번 실행되는 거라면 저런 경우를 위해 사용되는 sql syntax 가 있으려나…
오랫만에 직업병…