2014-01-07 2 views
0

친애 유래 회원에 depening A (회원)에 대한 (원),최고의 가장 일반적인

나는 네 개의 테이블이 : 회원, 원, circle_members 및 member_relations을.

데이터베이스 스키마에 대한 명확한보기를 보려면이 링크를 클릭하십시오. (1)의 ID를 갖는 부재 지금

http://sqlfiddle.com/#!2/1a47a6/1

,

존은 두 부재에 관한 것이다 [2,4].

그러나 John은 어떤 서클 회원도 아닙니다. 존 (최고의) 서클에 추가하고 싶습니다.

가장 좋은 말은 circle_members와 member_relations 사이에 가장 일반적인 구성원 ID가있는 원을 의미합니다.

이 원에는 관계에 두 개의 공통 ID가 있으므로이 경우 John이 원 # 1에 추가됩니다. 구체적으로 [2, 4]. 그러나 circle # 2에는 추가되지 않습니다. 하나의 공통 ID가 있기 때문에 [4]입니다. 주의 할 점이라면이 # 3의 공통 ID가 없으므로 # 3 번 원이 적절하지 않다는 것입니다.

SQL을 사용하여이 기능을 만들고 싶습니다. MySQL이 좋습니다.

감사합니다, Hussam. 이 같은

+1

당신은 당신이 2, 6은 일반 회원이었다 것을 어떻게 작동하는지 당신이 우리에게 비트를 놓쳤다 원하는 결과 – Strawberry

+1

과 함께 적절한 DDLs 및/또는 sqlfiddle을 제공하는 것이 좋습니다. 무엇에 공통점이 있습니까? –

+0

(공통)의 설명을 추가하여 질문을 수정했습니다. –

답변

1

뭔가 :

select circle_id, count(*) 
from member_circles mc 
inner join 
(
    -- Get related members 
    select relatedMemberId 
    from member_relations 
    where member_id = 1 -- That's John 
) x on x.relatedMemberId = c.member_id 
group by circle_id 
order by count(*) desc 

(.. 내가 member_relations가 열 MEMBER_ID 및 relatedMemberId 적절하게 변경 한 것으로 가정 한)는

이 먼저 가장 적합한 원으로 목록을 생성합니다.

건배 -

+0

위대한 사람, 그것은 효과가있다. –

+0

이 쿼리 수정 한 후입니다 : 선택 circle_id을 circle_members의 cm에서 (*) 을 계산 내부는 조인 × ( - - member_a = 1 member_relations 에서 가져 오기 관련 회원 선택 member_b 을 그 존 입니다) on x.member_b = cm.member_id by circle_id count (*) desc로 정렬; –

관련 문제