Ver Mensaje Individual
  #1 (permalink)  
Antiguo 15/04/2016, 11:34
Ktulu
Invitado
 
Mensajes: n/a
Puntos:
Pregunta JOIN 3 tablas relacionadas, búsqueda por tags

Hola,

Necesitaría ayuda para obtener los resultados de una consulta entre 3 tablas asociadas. La consulta es básicamente la búsqueda de registros por medio de tags.

Para ésto tengo 3 tablas:

NOTICIAS [id | titulo]
TAGS_NOTICIAS [id | id_tag | id_noticia]
TAGS [id | descripcion]

Lo que necesito hacer es que, dado uno o varios tags, se devuelva la(s) noticia(s) que tengan asociados dichos tags. El inconveniente es que necesito que devuelva todos los tags asociados a la noticia si es que hay coincidencia con uno de ellos

Como ejemplo, este sería el caso de éxito:

NOTICIA
[id] 67458
[titulo] Noticia de ejemplo

TAGS_NOTICIAS
[id] 125
[id_tag] 43
[id_noticia] 67458
--------------------
[id] 126
[id_tag] 45
[id_noticia] 67458

TAGS
[id] 43
[descripcion] tag1
--------------------
[id] 45
[descripcion] tag2

Suponiendo que busco noticias con el valor "tag1", el resultado debería ser:

REGISTRO
[id] 67458
[titulo] Noticia de ejemplo
[ntags] tag1, tag2

Paso a mostrarles la consulta:

Código MySQL:
Ver original
  1.   noticias.id,
  2.   noticias.titulo,
  3.   GROUP_CONCAT(tags.descripcion SEPARATOR ", ") AS ntags
  4.   tags_noticias ON tags_noticias.id_noticia = noticias.id
  5.   tags ON tags.id = tags_noticias.id_tag
  6.   tags.descripcion = $variable
  7.   noticias.id

El inconveniente es que los tags son acotados a la coincidencia y sólo devuelve ntags con el valor del tag buscado.

Existe alguna forma de hacer un subquery / LEFT JOIN / etc para obtener todos los tags de la noticia independientemente del tag buscado?

Gracias de antemano