I don't think you really want a LEFT JOIN. (See http://www.mysql.com/doc/en/JOIN.html). What you do need, I believe, is a join of group_members with itself to get member IDs on one side whose group ID matches Jim's group ID on the other side.

Try something like this:

mysql> SELECT groups.name AS group_name, members.name AS username
    -> FROM group_members AS g1, group_members AS g2, groups, members
    -> WHERE g1.member_id=1 AND g2.group_id=g1.group_id
    -> AND members.id=g2.member_id AND groups.id=g2.group_id
    -> ORDER BY group_name;
+------------+----------+
| group_name | username |
+------------+----------+
| Blue       | Jim      |
| Blue       | Mary     |
| Blue       | Bob      |
| Red        | Jim      |
+------------+----------+
4 rows in set (0.00 sec)

I won't promise that's the best way.

Michael

Dan Hansen wrote:
Please help -- by brain is fried...

I have three tables: groups, members, and a link table called group_members.

There is a record in group_members for each member that belongs to a given group.

A member may belong to several group.

I want to get a results set that shows all members where a given member, call him "Jim," also belongs.

Thus if Jim is a member of groups 1 and 3, Mary is a member of 3, and Bob belongs to 2 and 3, I want a results like the one below. I know how to get to this using an intermediate temporary table, but I'd like to vaid that if there's a way. The queries I have tried either give me all members in all groups, or only records where Jim is a member. My closest query follows, then a sketch of my tables with a results set at the end. Can someone please tell me where I an blowing it?

Thanks -

Dan Hansen


SELECT groups.name AS group_name, members.username AS username
FROM group_members
LEFT JOIN groups ON groups.id = group_members.group_id
AND group_members.member_id = 1 (This is Jim, it will be replaced by a variable in PHP code)
LEFT JOIN members ON members.id = group_members.member_id
ORDER BY groups.name




=======================
members
-----------------------
id   name
-----------------------
1    Jim
2    Mary
3    Bob

=======================
groups
-----------------------
id   name
-----------------------
1    Red
2    White
3    Blue

=======================
group_members
-----------------------
id   member_id  group_id
-----------------------
1    1          1
2    1          3
3    2          3
4    3          2
5    3          3

========================
DESIRED RESULT SET
------------------------
group_name   username
------------------------
Red          Jim
Blue         Jim
Blue         Mary
Blue         Bob

========================
DESIRED RESULT SET
------------------------
group_name   username
------------------------
Red          Jim
Blue         Jim
Blue         Mary
Blue         Bob (SHOULD NOT GET THIS ONE)
White        Bob




--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]



Reply via email to