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

Como puedo relacionar tablas en mysql para luego generar consulta

Estas en el tema de Como puedo relacionar tablas en mysql para luego generar consulta en el foro de Mysql en Foros del Web. Hola Soy nuevo en PHP y Mysql... la consulta que voy a realizar quizas sea muy básica, pero es que ya leí temas relacionados con ...
  #1 (permalink)  
Antiguo 30/09/2011, 08:26
Avatar de edilbertojara  
Fecha de Ingreso: marzo-2009
Mensajes: 22
Antigüedad: 10 años, 9 meses
Puntos: 0
Como puedo relacionar tablas en mysql para luego generar consulta

Hola Soy nuevo en PHP y Mysql... la consulta que voy a realizar quizas sea muy básica, pero es que ya leí temas relacionados con este, pero la verdad no me ha funcionado... ...entonces, por esto expongo exactamente lo que necesito:

Tengo una BD compuesta por 4 tablas así:

Nombre de tabla1: clientes
Campos: id_cliente, nombres, identificación,profesion,empresa

Nombre de tabla2: temas_de_interes
Campos: id_tema_de_interes, nombre_tema_de_interes, id_cliente

Nombre de tabla3: revistas
Campos: id_revista, nombre_revista

Nombre de tabla4: programas_tv
Campos: id_programa_tv, nombre_programa_tv

La idea es que desde un formulario que llena el cliente, este pueda diligenciar sus datos y seleccionar unos temas de interes de un listado que se esta mostrando a partir de las tablas (tabla No. 3 y tabla No.4-esto ya lo tengo funcionando), luego de digilenciar el formulario, al pulsar el boton enviar del formulario, los datos del cliente queden cargando en la tabla clientes (eso ya lo tengo funcionando), pero que además en la tabla temas_de_interes, no solamente queden guardados los temas que los clientes han seleccionado (eso ya lo tengo funcionando) sino que también queden con el respectivo id_cliente (eso no lo he podido hacer), para que más adelante, cuando yo vaya a relizar una búsqueda o modificación de los datos o temas de interes del cliente, pueda encontrar al cliente con los diferentes temas de interes que el ha seleccionado previamente.


En lo que me puedan colaborar, muchas gracias, y como les decía ya he leido los otros temas relacionados en el foro, e inclusive descargue unos videos, pero no he podido. Gracias
  #2 (permalink)  
Antiguo 30/09/2011, 12:18
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 11 años, 8 meses
Puntos: 574
Respuesta: Como puedo relacionar tablas en mysql para luego generar consulta

Código MySQL:
Ver original
  1. INSERT INTO temas_de_interes (id_tema_de_interes, nombre_tema_de_interes, id_cliente)
  2. VALUES ($id_tema_de_interes, $nombre_tema_de_interes, $id_cliente)

El dato del id_cliente tiene que venir igual que los otros del formulario o de la sesion o de donde lo tengas...
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 30/09/2011, 13:50
Avatar de Ribon  
Fecha de Ingreso: septiembre-2010
Ubicación: El firmamento
Mensajes: 487
Antigüedad: 9 años, 2 meses
Puntos: 91
Respuesta: Como puedo relacionar tablas en mysql para luego generar consulta

el id del cliente lo estás almacenando en un campo con la propiedad auto_increment?

si este es el caso usa la funcion


o (si estás haciendo las conexiones con pdo)

Código PHP:
Ver original
  1. $pdo->lastInsertId()

o (En caso de estar haciendolo con mysqli)

Código PHP:
Ver original
  1. $mysqli->insert_id

(Para los casos PDO y MySQLi la variable ponle el nombre que tu decidiste para el objeto)

eso te devuelve el último valor ingresado (por el cliente "usuario" actual) ingresado en un campo auto_increment

en caso de que tu valor no sea auto_increment y sea por ejemplo un identificador distinto pues inserta ese mismo dentro de la tabla relacionada ....

saludos.
  #4 (permalink)  
Antiguo 30/09/2011, 20:47
Avatar de edilbertojara  
Fecha de Ingreso: marzo-2009
Mensajes: 22
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Como puedo relacionar tablas en mysql para luego generar consulta

Ribon... el campo id_cliente se esta almacenando en la tabla clientes con la propiedad auto_increment, y el php que estoy utilizando para almacenar datos en esa tabla es :

mysql_query("INSERT INTO clientes (id_cliente,nombres,identificacion,profesion,empre sa) "."VALUES ('". $_POST["id_cliente"] ."','". $_POST["nombres"]."','". $_POST["identificacion"]."','". $_POST["profesion"]."','". $_POST["empresa"]."');",$conexion);?>

Me podrias, por favor Ribon indicarme como utilizo el codigo que me sugieres (mysql_insert_id()) , teniendo en cuenta el php que yo estoy utilizando?... Muchas gracias.
  #5 (permalink)  
Antiguo 30/09/2011, 20:56
Avatar de edilbertojara  
Fecha de Ingreso: marzo-2009
Mensajes: 22
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Como puedo relacionar tablas en mysql para luego generar consulta

Lo que estoy tratando de hacer es que desde un formulario el cliente, este pueda diligenciar sus datos y seleccionar unos temas de interes de un listado que se esta mostrando a partir de las tablas (tabla No. 3 y tabla No.4-esto ya lo tengo funcionando), luego de digilenciar el formulario, los datos del cliente queden en la tabla clientes (eso ya lo tengo funcionando), pero que además en la tabla temas_de_interes, no solamente queden guardados los temas que los clientes han seleccionado (eso ya lo tengo funcionando) sino que también queden con el respectivo id_cliente (eso no lo he podido hacer), para que más adelante, cuando yo vaya a relizar una búsqueda o modificación de los datos o temas de interes del cliente, pueda encontrar al cliente con los diferentes temas de interes que el ha seleccionado previamente.

El id_cliente lo hace automaticamente con auto_increment... ese id_cliente es el que quiero almacenar también en la tabla temas_de_interes.
  #6 (permalink)  
Antiguo 02/10/2011, 10:37
Avatar de Ribon  
Fecha de Ingreso: septiembre-2010
Ubicación: El firmamento
Mensajes: 487
Antigüedad: 9 años, 2 meses
Puntos: 91
Respuesta: Como puedo relacionar tablas en mysql para luego generar consulta

No tienes para que poner el id_cliente entre los campos de la consulta insert, si tien auto_increment.

basta con poner

Código MySQL:
Ver original
  1. insert into clientes(nombres,identificacion,profesion,empresa)
  2. VALUES ('blabla','blabla','blabla','blabla',);

y el auto_increment se asignará solo a la columna id_cliente.

luego obtienes el id de la siguiente manera en una variable php:

$id_cliente = mysql_insert_id();

y la variable ya tendrá el id del ultimo cliente que ingresaste, esa misma variable puedes asignársela a temas_de_interes, de la siguiente manera

Código MySQL:
Ver original
  1. insert into temas_de_interes (id_cliente, nombre_tema_interes)
  2. values ($id_cliente, 'nombre tema');

eso saludos, sorry la demora xD!
  #7 (permalink)  
Antiguo 02/10/2011, 12:47
Avatar de edilbertojara  
Fecha de Ingreso: marzo-2009
Mensajes: 22
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Como puedo relacionar tablas en mysql para luego generar consulta

Muchas gracias... lo voy a probar, ahora te cuento como me fué...


Cita:
Iniciado por Ribon Ver Mensaje
No tienes para que poner el id_cliente entre los campos de la consulta insert, si tien auto_increment.

basta con poner

Código MySQL:
Ver original
  1. insert into clientes(nombres,identificacion,profesion,empresa)
  2. VALUES ('blabla','blabla','blabla','blabla',);

y el auto_increment se asignará solo a la columna id_cliente.

luego obtienes el id de la siguiente manera en una variable php:

$id_cliente = mysql_insert_id();

y la variable ya tendrá el id del ultimo cliente que ingresaste, esa misma variable puedes asignársela a temas_de_interes, de la siguiente manera

Código MySQL:
Ver original
  1. insert into temas_de_interes (id_cliente, nombre_tema_interes)
  2. values ($id_cliente, 'nombre tema');

eso saludos, sorry la demora xD!
  #8 (permalink)  
Antiguo 02/10/2011, 14:45
Avatar de edilbertojara  
Fecha de Ingreso: marzo-2009
Mensajes: 22
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Como puedo relacionar tablas en mysql para luego generar consulta

Oye ya me esta almacenando el id_del_cliente dentro de la tabla temas_de_interes, pero ahora resulta lo siguiente:

... el codigo en este momento me carga perfectamente el id_del_cliente dentro de la tabla temas_de_interes, pero, el id_del_cliente carga bien para lo que se selecciona de una de las tablas, no para la otra... ...me explico:

Por ejemplo: el cliente con el id=1 seleccionó el nombre de varias revistas(Nombre de tabla3: revistas), y también el nombre de algunos programas de tv (Nombre de tabla4: programas_tv)... cuando verifico en la tabla temas_de_interes (Nombre de tabla2: temas_de_interes), observo que lo que cargo de la tabla 3, está perfecto con el id_del_cliente, pero lo que cargó de la tabla 4, le coloca un id_que no corresponde (y debería quedar con el mismo id, pues es el mismo cliente que está seleccionado al mismo tiempo el contenido de dos tablas diferentes).

Recuerdo entonces que: los temas de interes los esta leyendo de dos tablas diferentes:

Nombre de tabla3: revistas
Campos: id_revista, nombre_revista

Nombre de tabla4: programas_tv
Campos: id_programa_tv, nombre_programa_tv


El php que estoy haciendo es:
Nombre del php: cliente_nuevo_guardar.php

<?php
include ("conexion.php");
//===== Consulta para añadir el registro a la tabla clientes
mysql_query("INSERT INTO clientes (nombres,apellidos,comentario_de_registro) "."VALUES ('". $_POST["nombres"] ."','". $_POST["apellidos"]."','". $_POST["comentario_de_registro"]."');",$conexion);
?>

//===== Para añadir el nombre de las revistas selecionadas, a la tabla areas_de_interes
<?php
$id_cliente = mysql_insert_id();
foreach($_POST['nombre_de_la_revista'] as $revista) {
mysql_query("INSERT INTO revistas (id_cliente,areas_de_interes) VALUES('$id_cliente','$revista')",$conexion);
}
?>
//===== Para añadir el nombre de los programas de tv selecionados, a la tabla areas_de_interes
<?php
$id_cliente = mysql_insert_id();
foreach($_POST['nombre_programa_tv'] as $programa_tv) {
mysql_query("INSERT INTO programas_tv (id_cliente,areas_de_interes) VALUES('$id_cliente','$programa_tv')",$conexion);
}
?>


... que es lo que estoy haciendo mal?... discúlpame, ...tal vez, puede ser algo muy sencillo, pero estoy hasta ahora en proceso de aprendizaje... ...Ribon, muchas gracias por la colaboración que me estas dando...

Última edición por edilbertojara; 02/10/2011 a las 14:54
  #9 (permalink)  
Antiguo 04/10/2011, 20:45
Avatar de edilbertojara  
Fecha de Ingreso: marzo-2009
Mensajes: 22
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Como puedo relacionar tablas en mysql para luego generar consulta

Ya lo solucioné!!!!!... por fin!!!
El php quedó así:

//===== Para añadir el nombre de las revistas y programas de tv selecionadas, a la tabla areas_de_interes
<?php
$id_cliente = mysql_insert_id();
foreach($_POST['nombre_de_la_revista'] as $revista) {
mysql_query("INSERT INTO revistas (id_cliente,areas_de_interes) VALUES('$id_cliente','$revista')",$conexion);
}
foreach($_POST['nombre_programa_tv'] as $programa_tv) {
mysql_query("INSERT INTO programas_tv (id_cliente,areas_de_interes) VALUES('$id_cliente','$programa_tv')",$conexion);
}
?>
//===== De esta manera lleno la tabla areas de interes y me coloca el mismo id_cliente a los datos que extraje de la tabla de revistas y programas de tv...




Cita:
Iniciado por edilbertojara Ver Mensaje
Oye ya me esta almacenando el id_del_cliente dentro de la tabla temas_de_interes, pero ahora resulta lo siguiente:

... el codigo en este momento me carga perfectamente el id_del_cliente dentro de la tabla temas_de_interes, pero, el id_del_cliente carga bien para lo que se selecciona de una de las tablas, no para la otra... ...me explico:

Por ejemplo: el cliente con el id=1 seleccionó el nombre de varias revistas(Nombre de tabla3: revistas), y también el nombre de algunos programas de tv (Nombre de tabla4: programas_tv)... cuando verifico en la tabla temas_de_interes (Nombre de tabla2: temas_de_interes), observo que lo que cargo de la tabla 3, está perfecto con el id_del_cliente, pero lo que cargó de la tabla 4, le coloca un id_que no corresponde (y debería quedar con el mismo id, pues es el mismo cliente que está seleccionado al mismo tiempo el contenido de dos tablas diferentes).

Recuerdo entonces que: los temas de interes los esta leyendo de dos tablas diferentes:

Nombre de tabla3: revistas
Campos: id_revista, nombre_revista

Nombre de tabla4: programas_tv
Campos: id_programa_tv, nombre_programa_tv


El php que estoy haciendo es:
Nombre del php: cliente_nuevo_guardar.php

<?php
include ("conexion.php");
//===== Consulta para añadir el registro a la tabla clientes
mysql_query("INSERT INTO clientes (nombres,apellidos,comentario_de_registro) "."VALUES ('". $_POST["nombres"] ."','". $_POST["apellidos"]."','". $_POST["comentario_de_registro"]."');",$conexion);
?>

//===== Para añadir el nombre de las revistas selecionadas, a la tabla areas_de_interes
<?php
$id_cliente = mysql_insert_id();
foreach($_POST['nombre_de_la_revista'] as $revista) {
mysql_query("INSERT INTO revistas (id_cliente,areas_de_interes) VALUES('$id_cliente','$revista')",$conexion);
}
?>
//===== Para añadir el nombre de los programas de tv selecionados, a la tabla areas_de_interes
<?php
$id_cliente = mysql_insert_id();
foreach($_POST['nombre_programa_tv'] as $programa_tv) {
mysql_query("INSERT INTO programas_tv (id_cliente,areas_de_interes) VALUES('$id_cliente','$programa_tv')",$conexion);
}
?>


... que es lo que estoy haciendo mal?... discúlpame, ...tal vez, puede ser algo muy sencillo, pero estoy hasta ahora en proceso de aprendizaje... ...Ribon, muchas gracias por la colaboración que me estas dando...

Etiquetas: campos, php, relacionar, sql, tabla, tablas
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 04:38.