Foros del Web » Programando para Internet » PHP »

Relacionando tres tablas ayuda

Estas en el tema de Relacionando tres tablas ayuda en el foro de PHP en Foros del Web. Buenas Quisiera saber como realizar un SELECT que cumpla este requisito. Tengo tres tablas: noticias (id, titulo, nota, sumario, fecha) este es un ejemplo, el ...
  #1 (permalink)  
Antiguo 02/01/2009, 19:08
Avatar de enyalon  
Fecha de Ingreso: agosto-2008
Mensajes: 28
Antigüedad: 15 años, 8 meses
Puntos: 0
Relacionando tres tablas ayuda

Buenas
Quisiera saber como realizar un SELECT que cumpla este requisito.

Tengo tres tablas:

noticias (id, titulo, nota, sumario, fecha) este es un ejemplo, el real tiene más campos

Ejemplo de datos: tabla noticias
(1, titulo1, noticia1, sumario1, fecha)
(2, titulo2, noticia2, sumario2, fecha)
(3, titulo3, noticia3, sumario3, fecha)


categorías (id, nombre, descripcion) igual hay mas campos pero para ejemplificar sirve
Ejemplo de datos:
(1, categoria1, esta es la categoría 1)
(2, categoria2, esta es la categoría 2)
(3, categoria3, esta es la categoría 3)
(4, categoria4, esta es la categoría 4)
(5, categoria5, esta es la categoría 5)


cat_not (id_noticias, id_categorias) la idea es relacionar las noticias con las categorías. Y que un misma noticia puede pertenecer a varias categorías al tiempo.
Ejemplo de datos:
(1, 3)
(1, 4)
(1, 5)
(2, 1)
(2, 5)
(2, 1)
(3, 4)
(3, 5)

Como se puede ver en este ejemplo la categoría 5 se relaciona con las noticias 1,2 ,3

Quisiera saber como realizar un SELECT donde se muestre las dos últimas noticias relacionadas con la categoría 5.

P.D. Antes solo permitía que una noticia se asignara a determinada categoría y trabaja con dos tablas relacionadas y todo bien. Pero se me dio por esta idea y ahora estoy en problemas pero quiero aprender ¿cómo se logra esto que quiero?, ¿es correcta esta forma? Y ¿Hay otra vía para lograrlo que sea mejor?

De antemano muchas gracias a quien pueda ayudarme.
  #2 (permalink)  
Antiguo 03/01/2009, 18:13
Avatar de enyalon  
Fecha de Ingreso: agosto-2008
Mensajes: 28
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Relacionando tres tablas ayuda

¿Alguien? ¿Alguna Idea?

Intente algo así:

Código:
$categoria   = 5 ;  //  Paso la variable categoría que quiero ver.
  
$_bd_->_sql_consulta("SELECT * FROM not_cat WHERE id_categoria = '".$categoria."'”);
	while ($row = $_bd_->_sql_fetch_array())
	{
		if($row["id_categoria"] ==  $categoria); 
		{
			$ encuentroidnoticia = $row["id_noticia"];
			echo $ encuentroidnoticia;
			echo ‘<br>’ ;
		}	
	}
Esto me imprime como es lógico todos los id_noticia que existen:
1
2
3

Ahora pensé esto:
Si realizo otra consulta dentro de ese if…

Código:
$categoria   = 5 ;  //  Paso la variable categoría
  
$_bd_->_sql_consulta("SELECT * FROM not_cat WHERE id_categoria = '".$categoria."'");

	while ($row = $_bd_->_sql_fetch_array())
	{
		if($row["id_categoria"] ==  $categoria); 
		{
			$encuentroidnoticia = $row["id_noticia"];

			// echo $encuentronotas ;
			// echo ‘<br>’ ;
	
		$_bd_->_sql_consulta("SELECT * FROM noticias WHERE id = '".$ encuentroidnoticia."'"); 

			$row = $_bd_->_sql_fetch_array();

			echo $row["titulo"];	

		}
Me imprime ahora solo una noticia y no todas las que hay en la categoría 5:

Creo yo... debe haber una manera en que imprima todas las noticias de la categoría 5 (o un número mayor a sólo 1)

Igual creo que debe haber una manera de realizar un solo SELECT y no dos que es como intente.

Alguna idea, alguien que me explique en que me estoy equivocando, recuerden que estoy aprendiendo apenas y he leído bastante (quizá no lo suficiente) pero aún no encuentro como lograr lo que quiero.

Otra vez de antemano Gracias por cualquier ayuda.
  #3 (permalink)  
Antiguo 04/01/2009, 01:29
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Relacionando tres tablas ayuda

Tema trasladado a PHP.

http://www.forosdelweb.com/f21/funci...-datos-413499/
  #4 (permalink)  
Antiguo 04/01/2009, 01:30
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Relacionando tres tablas ayuda

con un código (solo una consulta) parecido a este sacarás las dos últimas noticias de la categoría 5 (te he puesto sólo la parte de consulta de MySQL):

Código sql:
Ver original
  1. SELECT n.id, n.titulo, n.sumario, n.fecha, c.nombre, c.descripcion
  2. FROM noticias n INNER JOIN cat_not cn ON cn.id_noticias = n.id
  3. INNER JOIN categorias c ON c.id = cn.id_categorias
  4. WHERE cn.id_categorias = 5 ORDER BY n.fecha DESC LIMIT 0,2

Pruébala y luego adáptala a tu código de programación. He escrito el nombre de la tabla categorias sin acento. Si tiene acento, pónselo.

Última edición por jurena; 04/01/2009 a las 01:40
  #5 (permalink)  
Antiguo 04/01/2009, 14:24
Avatar de enyalon  
Fecha de Ingreso: agosto-2008
Mensajes: 28
Antigüedad: 15 años, 8 meses
Puntos: 0
De acuerdo

Cita:
Iniciado por jurena Ver Mensaje
con un código (solo una consulta) parecido a este sacarás las dos últimas noticias de la categoría 5 (te he puesto sólo la parte de consulta de MySQL):

Código sql:
Ver original
  1. SELECT n.id, n.titulo, n.sumario, n.fecha, c.nombre, c.descripcion
  2. FROM noticias n INNER JOIN cat_not cn ON cn.id_noticias = n.id
  3. INNER JOIN categorias c ON c.id = cn.id_categorias
  4. WHERE cn.id_categorias = 5 ORDER BY n.fecha DESC LIMIT 0,2

Pruébala y luego adáptala a tu código de programación. He escrito el nombre de la tabla categorias sin acento. Si tiene acento, pónselo.

Muchas… pero muchas gracias Jesús. Ese es el SELECT que estaba buscando.
Aunque he leído un poco sobre el uso de JOIN en las consultas. No lograba comprender “bien” su uso (pienso que: porque no lo había aplicado concretamente), aún no logro comprender “bien” su uso pero no hay duda que entiendo lo que has hecho, es simple y claro, me abre las puertas para poder entender el uso de JOIN.
Nuevamente muchas gracias Jesús.


Cita:
Iniciado por GatorV Ver Mensaje
Nota para GatorV: originalmente este hilo de pregunta estaba en la sección de Base de Datos (MySQL) la respuesta (simple, clara y más que nada acertada) que recibí esta justamente enmarcada para esa sección (creo yo).
Así que no creo haberme equivocado de sección, con el cambio al foro sobre PHP vino la respuesta. Así que pido disculpas si me equivoque de sección en los foros (aún creo que no).

Última edición por GatorV; 04/01/2009 a las 14:56
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:15.