Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/07/2011, 06:20
SubZero_mb
 
Fecha de Ingreso: marzo-2004
Mensajes: 283
Antigüedad: 20 años, 2 meses
Puntos: 2
Consulta a 3 tablas

Buenas.

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:
id_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'
webs_relaciones
Código:
id_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
tags_relaciones
Código:
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
Bien con estas 3 tablas yo lo que quier hacer es lo siguiente:

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