Ojala podáis ayudarme con esto porque la verdad es que se me está quedando muy grande esto de las consultas a varias tablas y me estoy volviendo loco. Tengo un sistema de noticias que se publican en varias webs y lo que intento relacionar 3 tablas que son las siguientes:
'noticias': Almacena la id de la noticia y el título y el texto de la misma (entre muchas más cosas)
'webs_relaciones': Relaciona cada web con una o varias noticias o imagenes
'tags_relaciones': Relaciona cada etiqueta (tag) con una o varias noticias o imagenes
Os pongo un ejemplo para que sea más sencillo de entender:
noticias
Código:
webs_relacionesid_noticia | titulo | texto ------------------------------- 1 | 'titulo 1' | 'texto noticia 1' 2 | 'titulo 2' | 'texto noticia 2' 3 | 'titulo 3' | 'texto noticia 3' 4 | 'titulo 4' | 'texto noticia 4'
Código:
tags_relacionesid_web | id_x | tipo ------------------------- 1 | 1 | noticia 1 | 73 | imagen 1 | 3 | noticia 2 | 2 | noticia 3 | 1 | noticia 3 | 2 | noticia 3 | 4 | noticia
Código:
Bien con estas 3 tablas yo lo que quier hacer es lo siguiente:id_tag | id_x | tipo ------------------------- 23 | 1 | noticia 30 | 73 | imagen 51 | 1 | noticia 64 | 1 | noticia 67 | 2 | noticia 2 | 21 | imagen 98 | 2 | noticia 45 | 3 | noticia 33 | 3 | noticia 29 | 3 | noticia 23 | 4 | noticia 51 | 4 | noticia
Seleccionar el título y el texto de las noticias que esten relacionadas con la id_web = 3 y que tenga relacionadas las id_tag = 23 e id_tag = 51. Viendo la tabla 'webs_relaciones' la id_web = 3 tiene asociadas 3 noticias (la 1, 2 y 4), y viendo la tabla 'tags_relaciones' comprobamos que:
La noticia 1 tiene las tags: 23, 51 y 64
La noticia 2 tiene las tags: 67 y 98
La noticia 4 tiene las tags: 23 y 51
Por lo tanto la consulta debería devolverme el título y el texto de las noticias 1 y 4 que son las que tienen los tags 23 y 51 que buscabamos.
Pues nada, que dicho con palabras es relativamente sencillo, pero no tengo ni idea de como hacer esto porque estoy empezando con las consultas a varias tablas y me pierdo sobre todo a la hora de hacer el WHERE de la consulta. Supongo que sería algo como decirle:
Une la id_noticia con la id_x que sea igual y que tenga tipo = 'noticia' (de webs_relaciones y tags_relaciones)
Busca entre esas uniones los id_tag = 23 y 51 y la id_web = 3
Por favor echadme una mano porque estoy super perdido. Muchisimas gracias