Hola Leo, gracias por la ayuda, eso era justo lo que estaba buscando. Muy bien explicado.
Yo estuve buscando un poco por G! y había encntrado esta otra query que no la entiendo del todo pero decian que era la mejor forma por performance ya que hacer having tarda un poco más.
Código SQL:
Ver originalSELECT *
FROM tags t1 CROSS JOIN tags t2 CROSS JOIN tags t3
INNER JOIN tags_usuario tu1
ON t1.id = tu1.tags_id
INNER JOIN tags_usuario tu2
ON tu1.usuario_id = tu2.usuario_id
AND tu2.tags_id = t2.id
INNER JOIN tags_usuario tu3
ON tu2.usuario_id = tu3.usuario_id
AND tu3.tags_id = t3.id
INNER JOIN usuario u ON u.id = tu3.usuario_id
WHERE t1.id = $idTag1
AND t2.id = $idTag2
AND t3.id = $idTag3;
La base de datos va a tener aproximadamente 2 millones de usuarios y 300.000 tags y por cada usuario unos 10-15 tags por lo que la performance me importa bastante. Pero también me importa entender lo que hago así que voy a ver cual de las dos opciones uso.
Saludos y Gracias....