如何确定两个用户是否共享某些信息而没有多个查询

时间:2011-03-28 20:46:08

标签: php mysql join

我正在尝试弄清楚如何允许用户[V]访问其他用户的个人资料[A],以查看用户[A]所在的所有群组以及他们所属的群组两者兼而有之。

表格是:

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

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]所属的所有群组进行一般性查询:

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

当然会回复这个:

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>

目前我只能考虑使用返回的每一行的子查询来执行此操作,但我确信使用另一个连接或WHERE IN有一种更简单,更有效的方法,但到目前为止我尝试过的所有内容没用。

类似的东西:

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

但我知道这不起作用。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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是一个布尔类型(true / false)