Searching many-to-many map tables
| From: | Steve McGill | Date: | Wed, 07 Feb 2007 13:59:16 +0000 |
| Subject: | Searching many-to-many map tables | ||
| Groups: | php.db | ||
| Request: | Send a blank email to php-db+get-43033@lists.php.net to get a copy of this message | ||
Hello,
I am trying to find out how to search a many-to-many map table efficiently.
I have an example table:
user,user_group
1,1
1,2
2,1
3,2
I want to find out all the users who are a member of BOTH groups 1 AND 2. In
this example, this would just be the user with id 1.
Until now, I can either do this with multiple queries and using PHP
array_intersect, or one really ugly MySQL query:
select user, count(user_group) as num_groups_found from users_groups where
group IN (1,2) GROUP BY user HAVING num_groups_found=2
i.e. narrows down the groups I'm looking for and makes sure that they are
all found for a user
It works quite reliably I think but it's such a rubbish query that I was
hoping that somebody could teach me some syntax that is better.
Many thanks in advance,
Steve