Hola carlosdanielmou:
No estoy seguro de si entendí correctamente cual es el problema, pero checa este script a ver si es más o menos lo que necesitas:
Código MySQL:
Ver originalQuery OK, 0 rows affected (0.11 sec)
Query OK, 3 rows affected (0.01 sec)
+------+--------+
| uid | nombre |
+------+--------+
| 1 | uno |
| 2 | dos |
| 3 | tres |
+------+--------+
Query OK, 0 rows affected (0.08 sec)
Query OK, 3 rows affected (0.03 sec)
+------+--------+
| tid | nombre |
+------+--------+
| 1 | autos |
| 2 | usados |
| 3 | nuevos |
+------+--------+
Query OK, 0 rows affected (0.08 sec)
-> (2, 3), (3, 1), (3, 2);
Query OK, 7 rows affected (0.05 sec)
+------------+---------+
| usuario_id | tags_id |
+------------+---------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 2 |
| 2 | 3 |
| 3 | 1 |
| 3 | 2 |
+------------+---------+
-> ) T2
ON T1.uid
= T2.usuario_id
; +------+--------+
| uid | nombre |
+------+--------+
| 1 | uno |
| 3 | tres |
+------+--------+
Todo el problema se resuelve en el select interno marcado como T2. Para el ejemplo estoy buscando aquellos usuarios que tengan los tags 1 y 2.
El truco está en agrupar por usuario_id y preguntar por aquellos que tengan un HAVING COUNT = 2
Código:
GROUP BY usuario_id HAVING COUNT(usuario_id) = 2
para el caso del usuario 2, su COUNT sería de 1 (pues sólo tiene el tag 2), por lo tanto no entra dentro del filtrado.
Dale un vistazo para ver si es lo que necesitas, y si continuas con problemas pon algunos datos de ejemplo en tus tablas, para poder tratar de ayudarte.
Saludos
Leo.