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

insertar en 3 tablas relacionadas y unir una

Estas en el tema de insertar en 3 tablas relacionadas y unir una en el foro de Mysql en Foros del Web. buenas noches comunidad ando en un nuevo paradigma! tengo el siguiente inconveniente. tengo 3 tablas tabla estudiante Código: 1.cedula 2.nombre 3.direccion tabla grado Código: 1.id_grado ...
  #1 (permalink)  
Antiguo 25/06/2012, 12:39
 
Fecha de Ingreso: abril-2011
Mensajes: 52
Antigüedad: 13 años, 7 meses
Puntos: 0
Exclamación insertar en 3 tablas relacionadas y unir una

buenas noches comunidad ando en un nuevo paradigma! tengo el siguiente inconveniente.

tengo 3 tablas

tabla estudiante
Código:
1.cedula
2.nombre
3.direccion
tabla grado
Código:
1.id_grado
2.grado
3.seccion
tabla estudiante_grado
Código:
1.ced_estudiante
2.id_grado
las tablas estudiante y grado estan relacionada con estudiante_grado

lo que necesito es que al momento de registrar un nuevo estudiante el me guarde en la base de datos la informacion y al momento de guardarlas el me guarde en la tabla estudiante_grado la cedula del estudiante que se esta registrando y el id_grado del estudiante.

me explico algo mejor

cedula=120
nombre=carlos
direccion=los cocos

id_grado=1
grado=5
seccion=b

al momento el me agarre la cedula y el id_grado y me la guarde asi

tabla estudiante_grado
ced_estudiante= 120 l id_grado= 1

no se como hacer el insert para que me guarde y me combine esas tablas

dejo el codigo de mi formulario hay dejo con un INNER JOIN que intentaba de hacer pero nada.

Código PHP:
        <?php
                $conexion 
mysql_connect("localhost","root","")
                        or die (
"error");

                
$seleccionar_bd mysql_select_db("sistema2"$conexion);

                if (!
$seleccionar_bd)
                    {
                    die(
"Fallo la selección de la Base de Datos: " mysql_error());
                    }

                    
$nombre $_POST["nombre"];
                    
$sexo $_POST["sexo"];
                    
$direccion $_POST["direccion"];
                    
$cedula $_POST["cedula"];
                    
$telefono $_POST["telefono"];
                    
$grado $_POST["grado"];
                    
$seccion $_POST["seccion"];

                    
$insertar mysql_query("INSERT INTO estudiante (nombre,sexo,direccion,cedula,telefono) VALUES ('$nombre', '$sexo', '$direccion', '$cedula', '$telefono')"$conexion);
                    
$insertar mysql_query("INSERT INTO grado (grado,seccion) VALUES ('$grado', '$seccion')"$conexion);
                    
                       
$insertar mysql_query ("SELECT
                      a.cedula estudiante,
                      b.id_grado grado
                   FROM estudiante_grado ab
                  INNER JOIN estudiante a ON ab.ced_estudiante =  a.cedula
                   INNER JOIN grado b ON ab.id_grado =  b.id_grado
                      INSERT INTO estudiante_grado (ced_estudiante,id_grado)"
);
                    
                  if (!
$insertar)
                        {
                    die(
"Fallo en la insercion de registro en la Base de Datos: " mysql_error());
                        }
                        else
                        {
                            echo 
"datos ingresados Correctamente"
                            
                            }
                    
        
?>
Espero su Pronta respuesta amigos!
  #2 (permalink)  
Antiguo 25/06/2012, 13:22
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: insertar en 3 tablas relacionadas y unir una

Te falta un INSERT.
Noe stás guardando los datos en la tabla estudiante_grado. No hay transferencias "automáticas" de datos por FK en SQL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 25/06/2012, 22:18
 
Fecha de Ingreso: abril-2011
Mensajes: 52
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: insertar en 3 tablas relacionadas y unir una

pero esta bien formulado la sentencia?? porque al final de los inner join esta el insert pero no me funciona!! como dices tu?

Código:
$insertar = mysql_query ("SELECT 
                      a.cedula estudiante, 
                      b.id_grado grado 
                   FROM estudiante_grado  ab 
                  INNER JOIN estudiante a ON ab.ced_estudiante =  a.cedula 
                   INNER JOIN grado b ON ab.id_grado =  b.id_grado 
                      INSERT INTO estudiante_grado (ced_estudiante,id_grado)");
e probado de todo pero na!
  #4 (permalink)  
Antiguo 26/06/2012, 03:30
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: insertar en 3 tablas relacionadas y unir una

No. No está bien formulado, porque la relación entre las tres tablas sólo existirá cuando hayas ingresado los datos en "estudiante_grado"...

Vamos a ver si puedo explicarte mejor:
Las tablas relacionales no se pueden llenar si no es programáticamente, porque sus datos provienen de tablas base que aún no están vincularas. Precisamente la tabla relacional ES el vínculo.


Normalmente esto significa que si tienes que dar un alta en dos tablas y luego establecer la relación entre esos registros, forzosamente tendrás que programar tres INSERT, de los cuales el tercero es siempre el de la tabla relacional. Pero ese tercer INSERT jamás provendrá de un SELECT... INSERT... porque la relación de ese SELECT es inexistente y devolverá NULL.
Cuando se desea evitar realizar específicamente los tres INSERT INTO ... VALUES(...), y no se requieren controles de otro tipo respecto a los valores, lo que se suele hacer es implementar el alta en un stored procedure, al cual se pasan todos los datos a dar el alta, de todas las tablas involucradas, y es dentro del P donde se realizan las validaciones de las altas en la tablas base, antes de hacer la de la relacional.
Una de las ventajas de usar SP para esto es que puedes meter toda la ejecución en una transacción, con lo que o se confirman las tres altas al mismo tiempo, o no entra ninguna, con lo cual te estas asegurando la consistencia de los datos y la integridad referencial en una sola llamada.


El tema de los SP es extremadamente poderoso, y libera recursos del sistema, dando la responsabilidad al servidor de MySQL.



Ojo: No son para cualquier uso. No es conveniente hacer tareas que el lenguaje de programación hace mejor. No te olvides que el SQL no es un lenguaje de programación sino de consultas, y está optimizado para realizar operaciones masivas con datos, y no para crear aplicativos o reportes (salvo algunas excepciones). Para eso existen oros medios mejores.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 26/06/2012 a las 06:59
  #5 (permalink)  
Antiguo 26/06/2012, 12:06
 
Fecha de Ingreso: abril-2011
Mensajes: 52
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: insertar en 3 tablas relacionadas y unir una

hay medi oagarre la onda lo que entendi es que si voy a relacionar de dos tablas tengo que ya tener registrado el alumno y en que parte entonces pondria la relacion de las 2 tablas a la estudiante_grado? como quedaria amigo?
  #6 (permalink)  
Antiguo 26/06/2012, 12:14
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: insertar en 3 tablas relacionadas y unir una

No entiendo tu duda.
La tabla estudiante_grado es la que establece la relación. Contiene las dos PK como FK, tanto la del estudiante, como la del grado.
Obviamente esto implica que para insertar algo ya tienes que tener los ID que corresponden a cada una de las tablas base (estudiante y grado )...
¿Qué parte es lo que no se entiende?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 26/06/2012, 22:23
 
Fecha de Ingreso: abril-2011
Mensajes: 52
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: insertar en 3 tablas relacionadas y unir una

ok explico mejor.

registro un nuevo estudiante
Código:
1.nombre JENDER
 2.direccion LAS PALMAS
 3. cedula  12020343
que se guardan en estudiante y

Código:
1.id_grado 1
1.grado 3
2.seccion B
en grado

ahora la tabla estudiante_grado necesita saber a que cedula se le asignara el id_grado es aca donde ando en consfusion

quiero que el programa solo me agarre la cedula del que estoy registrando y el id me lo recoja en esta tabla

Código:
1.ced_estudiante 12020343
2.id_grado
pueden haber muchos estudiantes entonces como el programa sabe o se da cuenta de q cedula y que id le pertenece a cada estudiante! me explico amigo?
  #8 (permalink)  
Antiguo 27/06/2012, 04:22
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: insertar en 3 tablas relacionadas y unir una



Perdoname que te lo diga, @JenderxD, pero tu pregunta me asombra, y me hace dudar de cuánto sabes realmente de programación... Es la primera vez que alguien pregunta eso en este foro o en otros que yo he visto.
Sin ofender.

Vamos por la aclaración final:
Cita:
como el programa sabe o se da cuenta de q cedula y que id le pertenece a cada estudiante
El programa no sabe nada. Ningún programa sabe, eres tu, como programador, el que tiene que diseñar el programa de modo que el usuario ingrese la información necesaria, y el sistema la procese para crear las relaciones entre los datos.
PAra empezar:
1) Cargas los datos correspondientes a qué grados existen en la institución. Son datos fijos, que se usan en muchas operaciones, una de las cuales es la inscripción de alumnos en los cursos. Cómo y en qué momento cargas esos datos, es tema que tienes que resolver tu.
2) El alumno es cargado la primera vez cuando se inscribe o matricula en una institución. Al momento de la matriculación, el alumno o el usuario del programa, selecciona en qué curso o grado se inscribirá.
3) Si el alumno existe, antes de seleccionar el grado, se buscan sus datos (el ID entre ellos) y se verifica qué grados ya ha cursado, para no ofrecérselos.
4) Si nunca se inscribió, se le toman los datos y al momento de generar el alta, se recupera el ID del alumno correspondiente.
5) Con ambos datos ya recuperados, al confirmar la inscripción, el sistema envia a registrar las ID en la tabla que relaciona los datos de los alumnos con el grado a que pertenece. Es en ese momento en que la relación "nace".

En otras palabras: Es tu responsabilidad crear esa vinculación.

Todo esto, y tenlo bien en cuenta, no es Base de Datos, es programación, o en todo caso analisis de sistemas, y tiene que ver con las reglas del negocio (ver tema "reglas de negocio" en Wikipedia).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 27/06/2012, 18:11
 
Fecha de Ingreso: abril-2011
Mensajes: 52
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: insertar en 3 tablas relacionadas y unir una

ok disculpa por la pregunta! lo que pasa es que soy nuevo con esto de programacion de verdad! y pues no estoy empapado en el asunto mil disculpas y gracias por tu ayuda!

este foro se hizo fue para aprendizaje y hasta ahora e aprendido bastante. gracias de todas formas!

Etiquetas: join, php, relacionadas, select, 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 14:37.