Tupale

Juegos de registros relacionales y anidados con Dreamweaver

Antes de comenzar les recuerdo que este tutorial surge por la pregunta de uno de los usuarios del curso “Como crear sitios web dinámicos con PHP y MySQL paso a paso” así que si no estas acostumbrado a usar los comportamientos de Dreamweaver en el desarrollo de tus proyectos te recomiendo ver alguna información de este curso.

Cuando hacemos sitios dinámicos en PHP y MySQL por lo general administramos varias tablas de la base de datos que queremos relacionar de alguna manera por lo que representan unos datos con respecto a otros. Un ejemplo claro de esto es un sistema de noticias con comentarios donde solo los usuarios registrados pueden comentar, en este caso ya tenemos al menos tres tablas diferentes que tienen cosas en común (Tablas: Noticias, Comentarios y Usuarios).
De manera que basare este tutorial o capitulo adicional del curso en este ejemplo de un sistema de noticias con comentarios y registro de usuarios. Primero dejemos claro cual seria la estructura de la base de datos para que todos partamos de lo mismo.
Usaremos las siguientes tablas:

NOTICIAS
idnoticia (int)
titulo (varchar)
noticia (text)

USUARIOS
idusuario (int)
email (varchar)
password (varchar)

COMENTARIOS
idcomentario (int)
idnoticia (int)
idusuario (int)
comentario (text)

Como pueden ver la tabla de comentarios incluye primero el campo de identificación y luego un campo que lo asociara con el id de la noticia y otro que los asociara al id del usuario.

Ahora entremos con la parte del código, como es tradición aquí nos basaremos en los comportamientos que nos ofrece Dreamweaver, sin embargo en esta ocasión tendremos que adentrarnos un poco en la modificación de dichos códigos para obtener el resultado deseado.

Primero crearemos un juego de registros que tomando el parámetro de idnoticia por url (GET) nos entregara la noticia que deseamos mostrar.

Juego de registro noticia

Juego de registro noticia

Bien ahora ubicaremos los datos en nuestra pagina como aprendimos durante el curso de diseño web PHP y MySQL.

Datos en la tabla de noticias

Datos en la tabla de noticias

Hasta aquí todo el contenido ya había sido visto durante el curso, ahora vamos a ver algo nuevo, las consultas anidadas y relacionales.

Primero vamos a crear un juego de registros que se encargara de llamar los comentarios de dicha noticia, y por lo tanto lo filtraremos por el campo idnoticia de la tabla comentarios, sin embargo para este caso no usaremos la opcion de “Parámetro URL” sino que utilizaremos “Valor introducido”.

Juego de registros comentarios

Juego de registros comentarios

Y es aquí donde tenemos que poner nuestras manos a sobre el código, deben estar muy pendientes para no alterar u omitir algo que pudiera dañar el funcionamiento del script. Esto es lo que nos debe aparecer en la parte de codigo, en los juegos de registros.

Codigo de juegos de registro dreamweaver

Codigo de juegos de registro dreamweaver

Nos centraremos en el juego de registro de “comentarios” que es el que queremos dinamizar mas.

mysql_select_db($database_adminweb, $adminweb);
$query_comentarios = "SELECT * FROM comentarios WHERE idnoticia = idnoticia";
$comentarios = mysql_query($query_comentarios, $adminweb) or die(mysql_error());
$row_comentarios = mysql_fetch_assoc($comentarios);
$totalRows_comentarios = mysql_num_rows($comentarios);

Lo primero sera anidar el juego de registro al juego de registros noticia, para esto debemos reemplazar el filtro WHERE de la siguiente manera.

Antes:  WHERE idnoticia = idnoticia”;
Ahora:  WHERE idnoticia = ‘”.$row_noticia[‘idnoticia’].”‘”;

Como verán ahora solo se mostraran comentarios de los cuales su campo idnoticia, concuerde con el resultado idnoticia del juego de registros “noticia”.

Y ahora vamos a hacer una relación de bases de datos que es la parte que les resultara mas interesante ya que con ella pueden ahorrarse mucho trabajo y código a la hora de crear scripts que utilicen varia tablas. Pero para esto deberemos usar lo aprendido acerca de MySQL.

Primero lo que hacemos es seleccionar mas de una tabla a la vez que tienen algún campo en común, en este caso comentarios y usuarios tienen el campo idusuario en común así que al juego de registro comentarios le agregaremos la tabla de usuarios.

Seleccionar dos tablas

Seleccionar dos tablas

Pero como ahora tenemos dos tablas, cada ves que en la consulta vamos a referirnos a un campo debemos decir a que tabla pertenece cada campo, esto lo hacemos colocando el nombre de la tabla antes del nombre del campo y separandolos por punto. Y como de la segunda tabla no vamos a filtrar por un valor especifico sino que vamos a obtener los valores en asociación a la primera tabla entonces lo que hacemos es pedir que solo use los registros de usuarios que contengan como idusuario el mismo valor que tiene el campo de idusuario en la tabla de comentarios. De la siguiente manera.

Seleccionar campos iguales entre tablas

Seleccionar campos iguales entre tablas

Recuerden agregar el “AND” para aclarar que hay mas de una condición que debe cumplirse.

Ahora pueden pasar de nuevo a la vista de diseño y refrescar la pagina, si todo ha salido bien en el panel de vinculaciones ahora les saldrá su juego de registros “comentarios” con los campos de ambas tablas. Y podrán usarlo para generar regiones repetitivas, como en este caso donde repetiremos todos los comentario que pertenecen a la noticia y adicionalmente podremos mostrar el email del usuario que escribió el comentario.

Juegos de registros relacionados

Juegos de registros relacionados

Eso es todo por ahora, espero que les gustara y recuerden recomendar la pagina. xD

3 comments for “Juegos de registros relacionales y anidados con Dreamweaver

  1. anhelez
    24 julio, 2012 at 12:35 AM

    Hola ..
    Esos son mis dos juegos de registro, lo que quiero es que cuando seleccionas el usuario te despliegue sus datos, pero me marca error cuando hago la relación que mencionas arriba, se pudiera saber que es lo que estoy haciendo mal 🙁 agradeceria su respuesta me urge terminar este proyecto
    mysql_select_db($database_angeles, $angeles);
    $query_gestores = “SELECT * FROM gestor”;
    $gestores = mysql_query($query_gestores, $angeles) or die(mysql_error());
    $row_gestores = mysql_fetch_assoc($gestores);
    $totalRows_gestores = mysql_num_rows($gestores);

    mysql_select_db($database_angeles, $angeles);
    $query_datosUsuarios = “SELECT * FROM gestor WHERE idGestor = idGestor”;
    $datosUsuarios = mysql_query($query_datosUsuarios, $angeles) or die(mysql_error());
    $row_datosUsuarios = mysql_fetch_assoc($datosUsuarios);
    $totalRows_datosUsuarios = mysql_num_rows($datosUsuarios)

  2. 27 julio, 2012 at 11:24 PM

    En las dos consultas que muestras aquí ambos juegos de registro están seleccionando todos los campos de la tabla “gestor”, el tutorial pretende enseñar a hacer un solo juego de registros para llamar datos de dos tablas que se relacionen por una llave primaria y una llave foránea, en este caso tus dos juegos registros llaman exactamente la misma información.

  3. arantxa
    13 marzo, 2013 at 12:07 PM

    Hola buenas tardes . Espero que me puedan echar una mano porque estoy atascada y no puedo seguir

    La página es un portal de venta de productos. Tengo tres tablas relacionadas. La primera “Producto” tiene un idproducto y distintos campos que recogen las características del producto (modelo, precio, horas, etc…). La segunda “Usurarios” tiene un idusuarios y el nombre , la clave y un nivel de acceso. La tercera “Maquinas por usuario” que tan solo tiene idmaquinas _por _usuarios e id_usuario. Ësta está relacionada con las otras dos a través de los id ya que un mismo usuario puede tener distintos productos en el portal. Las tengo relacionadas y cuando subo los productos entran todos los datos correctamente en las tres tablas.
    Mi problema ahora es el siguiente. Mis usuarios deberán entrar desde la página principal a través del nombre y una clave a una nueva página en la que le salude y muestre todos los productos que tiene en el portal
    Consigo hacer la primera parte (variable de sesion) y que lo salude por su nombre pero luego cuando creo una consulta para que me dé los datos de la tabla productos, uso tu ejemplo de pedir datos de tablas relacionadas y hasta ahí todo bien, el problema es que me muestra los datos de todos los usuarios, no consigo filtrar los datos del usuario que ha iniciado sesion, que son los que tiene que salir, al ser codigo de dreamweaver que crea los parametros de session automaticamente, no tengo ni idea de como crear una variable para que filtre por el usuario. Siempre me dice que no hay datos si añado la variable de sesion. No sé si el problema es de Dreamweaver o de que no relaciono correctamente la variable de sesión con el idusuario o tengo que pasar la variable por url…. Por favor alguna pista.

    Gracias de antemano

Deja un comentario

A %d blogueros les gusta esto: