Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Subconsulta Sistema de Noticias

Estas en el tema de Subconsulta Sistema de Noticias en el foro de Mysql en Foros del Web. Buenas, de practica estoy avanzando en un sistema de noticias bien sencillo, el cual por ahora tiene una pagina donde se crean las noticias, luego ...
  #1 (permalink)  
Antiguo 21/07/2011, 14:05
 
Fecha de Ingreso: marzo-2008
Mensajes: 60
Antigüedad: 16 años
Puntos: 0
Subconsulta Sistema de Noticias

Buenas, de practica estoy avanzando en un sistema de noticias bien sencillo, el cual por ahora tiene una pagina donde se crean las noticias, luego la pagina principal en la cual aparecen los titulos de cada una de las noticias linkeados y de este link nos dirige a otra pagina donde se ve la noticia desarrollada. Lo que busco es que me orienten para que en la pagina principal donde se ven los titulos de las noticias pueda crear tambien una seccion de categorias, en la cual al darle click en el link de cada categoria en vez de mostrarse en la pagina principal los titulos de todas las noticias se muestren solo los de esa categoria.

Dejo la tabla y codigo que tengo hasta ahora:

Cita:
CREATE TABLE `noticias` (
`id` int(10) NOT NULL auto_increment,
`titulo` varchar(50) NOT NULL,
`fecha` date NOT NULL,
`noticia` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;
Pagina con el formulario para crear cada noticia:

Código PHP:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>administrar</title>
</head>
<body>
<form action="sistnoticias.php" method="post">
Título noticia:<br>
<input type="text" name="titulo"><br>
Escriba el articulo<br>
<textarea name="articulo" cols="50" rows="10"></textarea><br>
<input type="submit" value="Publicar"><br>
</form> 
<?php 
$noticia
=$_POST['articulo'];
$fecha=date('y-m-d');
$titulo=$_POST['titulo'];
if(
$noticia!="" and $titulo!=""){
include(
'db-cnx.php');
mysql_query("insert into noticias(titulo,fecha,noticia) values('$titulo','$fecha','$noticia')");
}
?>
</body>
</html>
Pagina Principal donde se imprimen los titulos linkeados de cada noticia:

Código PHP:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
<?php 
include('db-cnx.php');
$re=mysql_query('select * from noticias order by id desc ');
while(
$f=mysql_fetch_array($re)){
echo 
'<tr>'.$f['fecha'].'</td><br />';
echo 
'<tr><a href="noticia.php?id='.$f['id'].'">'.$f['titulo'].'</a></td></tr><br /><br />';
}
?>
</body>
</html>
y por ultimo, la Pagina en la cual se muestran las noticias desarrolladas:

Código PHP:
<?php 
include('db-cnx.php');
$re=mysql_query('select * from noticias where id ="'.$_GET['id'].'" ');
while(
$f=mysql_fetch_array($re)){
echo 
'<tr>'.$f['fecha'].'</td><br />';
echo 
'<tr>'.$f['titulo'].'</td></tr><br /><br />';
echo 
'<tr>'.$f['noticia'].'</td></tr><br /><br />';
}
?>
Pienso que deberia ser agregando el campo categoria a la tabla que tengo o creando una tabla nueva con las categorias y un id_categorias en la tabla que tengo pero nosabria como realizar la sub consulta para mostrar esos resultados

Desde ya gracias.
  #2 (permalink)  
Antiguo 21/07/2011, 14:26
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Subconsulta Sistema de Noticias

Hola Sabin:

No entendí qué ayuda es la que necesitas, si es con el modelo de tu BD o con programación. Si es este último creo que te equivocaste de Foro, lo correcto es que te dirijas al foro de PHP que está habilitado para este fin

http://www.forosdelweb.com/f18/

Ahora bien, si lo que quieres es tener ideas acerca del modelo de BD, este dependerá de tu lógica de negocio, por ejemplo, si una noticia puede entrar en una y sólo una categoría entonces tal como mencionas, lo único que tendrías que hacer es agregar un campo a tu tabla de noticias donde especifiques a qué categoría pertenece. Es recomendable que crees un catálogo de categorías y que el campo nuevo sea una FK hacia este catálogo.

Sin embargo, podría darse el caso de una noticia que pudiera entrar en más de una categoría, por ejemplo:

"Hugo Chávez siente que les robaron la final"

Esta noticia podría entrar tanto en la categoría DEPORTES como INTERNACIONAL o incluso POLÍTICA, al referirse al presidente de un país.

Bajo este esquema, al tener una relación muchos a muchos sería necesario crear una tabla adicional NOTICIAS-CATEGORIAS (manteniendo la tabla de noticias y la de categorías) donde contendía sólo las llaves hacia estas dos tablas.

En cuanto a cómo hacer la consulta, bueno dependería en primer lugar del modelo que elijas, con el primer escenario sería símplemente hacer algo como esto:

Código:
Select * from Noticias where id_categoria = Categoría_seleccionada_por_usuario
Para el caso del segundo escenario la consulta sería más o menos así

Código:
Select N.* from Noticias T1 
INNER JOIN Noticias-categorías NC on NC.id_noticia = N.id 
WHERE NC.id_categoria = Categoría_seleccionada_por_usuario
Espero que esto te pueda ayudar de alguna manera.

Saludos
Leo.
  #3 (permalink)  
Antiguo 21/07/2011, 14:49
 
Fecha de Ingreso: marzo-2008
Mensajes: 60
Antigüedad: 16 años
Puntos: 0
Respuesta: Subconsulta Sistema de Noticias

Cita:
Iniciado por leonardo_josue Ver Mensaje
Código:
Select * from Noticias where id_categoria = Categoría_seleccionada_por_usuario
Para el caso del segundo escenario la consulta sería más o menos así

Código:
Select N.* from Noticias T1 
INNER JOIN Noticias-categorías NC on NC.id_noticia = N.id 
WHERE NC.id_categoria = Categoría_seleccionada_por_usuario
Espero que esto te pueda ayudar de alguna manera.

Saludos
Leo.
Muchas gracias, eso es exacto lo que buscaba y ahi esta mi duda, ejemplo en el primer caso que tuviera en esa misma tabla el campo id_categoria,
seria:

Código PHP:
Select from Noticias where id_categoria $_GET['???']; 
No se que variable iria en el $_GET para luego poder mostrar solo las noticias de lacategoria que selecciono el usuario.

Etiquetas: subconsulta
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 07:38.