2011-03-28 4 views
6

사용자 [V]가 다른 사용자의 프로필 [A]을 방문하여 해당 사용자 [A]를 볼 수있게하는 방법을 알아 보려고합니다. ]도 포함되어 있으며 어느 그룹의 일부 인지도 알 수 있습니다.두 명의 사용자가 여러 쿼리없이 일부 정보를 공유하는지 확인하는 방법

테이블은 다음과 같습니다

SELECT groups.group_name FROM groups JOIN group_users 
ON groups.group_id=group_users.group_id WHERE group_users.user_id=2 LIMIT 0,10 

어떤 코스의 반환이 :

USERS TABLE 
user_id | name | email.... 
1  | Drent | drents... [V] 
2  | Dude2 | [email protected] [A] 
3  | Dude3 | [email protected] 

GROUPS TABLE 
group_id | group_name | joining_policy 
1  | The Crazies | invite_only 
2  | Team OSM  | open 
3  | My Group  | approval_needed 

GOUP_USERS TABLE 
group_id | user_id 
1  | 1 
1  | 2 
3  | 2 
2  | 1 
2  | 3 

내가 모든 그룹의 사용자에 대한 일반적인 질의를 할 수있는 [A]의 일부입니다

The Crazies - <a href="$row['group_id']?join=$my_user_id>Join This Group</a> 
My Groups - <a href="$row['group_id']?join=$my_user_id>Join This Group</a> 

하지만 내가 원하는 것은 [V]가 어떤 그룹을 공유하고 어떤 그룹에 참여할 수 있는지 보여주는 방법입니다.

예를 들어

:

난 단지 반환 된 각 행에 대해 하위 쿼리를 사용하여이 일을 생각할 수있는 순간
The Crazies - You're already a member 
My Groups - <a href="$row['group_id']?join=$my_user_id>Join This Group</a> 

하지만 난 다른 조인을 사용하여 할 수있는보다 쉽고 효율적인 방법이있을거야 또는 지금까지 내가 시도한 모든 것은 작동하지 않았다. 같은

뭔가 :

SELECT groups.group_name FROM groups JOIN group_users 
ON groups.group_id=group_users.group_id JOIN users AS visitor 
ON visitor.user_id=group_users.user_id WHERE group_users.user_id=2 LIMIT 0,10 

하지만이 작동하지 않는 것을 알고있을 것이다.

도움을 주시면 감사하겠습니다.

+0

는 당신이 INTERSECT를 시도 (참/거짓) 부울 유형입니까? 그렇게하면 한 사용자 + 병합을 위해 그룹을 선택하는 데 필요한 작업량을 두 배로 늘릴 수 있습니다. –

+0

@ t.dubrownik : 'MySQL'은 'INTERSECT'를 지원하지 않습니다. – Quassnoi

답변

1
SELECT g.*, guv.group_id IS NOT NULL AS is_member 
FROM group_users gua 
JOIN group g 
ON  g.id = gua.group_id 
LEFT JOIN 
     group_users guv 
ON  guv.group_id = gua.group_id 
     AND guv.user_id = $v 
WHERE gua.user_id = $a 
+0

감사. 아주 좋은 해결책! – drent

1
SELECT A.group_name, (u.user_id is not null) as AlreadyAMember 
FROM 
(
SELECT groups.group_id, groups.group_name 
FROM groups 
JOIN group_users ON groups.group_id=group_users.group_id 
WHERE group_users.user_id= $A 
LIMIT 0,10 
) A 
LEFT JOIN group_users u ON u.group_id=A.group_id and u.user_id= $V 

열 AlreadyAMember는

+0

감사합니다. 그것은 작동하지만 다른 해결책은 조금 이해하기 쉽다는 것을 알았습니다 :) – drent

관련 문제