From: Tranc3 Music Date: January 30 2013 6:07pm Subject: Re: Insertar registros en varias tablas (mysql-php) List-Archive: http://lists.mysql.com/mysql-es/3955 Message-Id: MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable El 30/01/13, Celso Gonz=E1lez escribi=F3: > On Wed, Jan 30, 2013 at 06:34:52AM -0500, Tranc3 Music wrote: >> Hola chicos agradeciendo su paciencia y su tiempo les hago llegar mi >> inquietud: >> >> Tengo 4 tablas no se si esta bien el dise=F1o de la base de datos :( > > En principio no tiene porque estar mal, sin conocer los datos parece m=E1= s o > menos > correcto, aunque puede que no sea la soluci=F3n optima Muchisimas gracias por responder! te estoy muy agradecido, te detallo mas: Estoy haciendo una peque=F1a aplicacion para una empresa de taxis peque=F1a y he considerado yo cuato tablas principales: propietario del vehiculo conductor del vehiculo vehiculo ficharegistral (esta tabla es la que tiene PK principal para relacionar) MI idea luego de ver algunas cosas de documentos que obtuve pues veo que la ficha registral es unica y tiene numero y un codigo (supongo que pertenece a la ficha) ya que esta cerca del numero, aclarando que no tengo mas datos, estoy tratando de ordenar y darle algo de sentido a lo que hago. podrian salir mas tablas por ahora lo deje asi.... estoy relacionando por numrodeficharegistral como dije en el primer mensaje propietario tiene un campo como PK el cual es idprop no le puse auto_increment y tiene un FK numfichregprop (numero ficha registral propietario) campo que en nombre no es igual a la tabla ficharegistral pero en dato si similar para el conductor hay un campo idcond no le puse auto_increment :(,= PK tiene un FK numfichregcond (numero ficha registral conductor) campo que en nombre no es igual a la tabla ficharegistral pero en dato si para el vehiculo la PK es idvehitampoco es autoincremnet lo pongo manual porque tiene letras y numeros PK y tiene un FK numfichregpvehi (numero ficha registralvehiculo) campo que en nombre no es igual a la tabla ficharegistral pero en dato si Con los PK Y FK estoy relacionando He insertado datos desde la consola mysql en el siguiente orden de tablas tablas ficharegistral, propietario, conductor y vehiculo, considerando que los campos pk de ficha registral son iguales en dato a las FK en las demas tres tablas, hasta aqui todo iba bien, hice un script en php para buscar con distintos campos y mostraba los registros de las cuatro tablas..., prosegui > > >> tabla1 (principal) >> campo1 PK >> campo2 >> ... >> >> tabla2 >> campo22 (PK) >> campo222 >> campo1 (FK) >> campo2222 >> >> tabla3 >> campo33 (PK) >> campo1 (FK) >> campo333 >> ... >> tabla4 >> campo44 (PK) >> campo444 >> campo 1 (FK) >> >> Las cuatro tablas las tengo relacionada por un campo comun (campo1) en >> una es PK y en otras es FK. > > Oks > >> Para las consultas he usado inner join, no tuve problemas, pero para >> la inserci=F3n tengo problemas :( >> >> He usado para insertar 4 insert para cada tabla insert into tabla 1 >> (campos) values (...) >> SI me fijo bien las tablas todas tiene PK diferentes y tres de ellas >> tiene FK para relacionarlas, > > Correcto > >> cuando inserto datos totalmente >> diferentes osea no coincide ninguna PK entonces si inserta bien, pero >> cuando por ahi repito algun campo PK de alguna tabla solo una de ellas >> me dice que hay duplicidad de campo las DEMAS tablas que tienen PK no >> dice dice nada, modifico esa advertencia de campo a otro valor e >> inserta se guarda :(, osea se salta algunos PK, no deberia ser :( y >> los registros no son iguales con count he contado y varian el numero >> de registros :(. > > Aqui est=E1 algo confuso, estoy suponiendo que las tablas tienen el > autoincrement en la pk, aunque si no fuese as=ED las explicaciones ser=ED= an las > mismas Por ahi habia leido que si la base de datos esta mal tendria problemas al usar codifo para insertar, por ello arriba trato de ser los mas detallado (en este nuevo mensaje) M explico mas: he generado un script verificar_registros.php ahi dentro liego de la conexioon etc.... Uso la misma forma de insertar de la consola que hice (recuerdo que hice con datos diferentes no repeti ningun tal vez ahi no me di cuenta) mysql_query("insert into ficharegistral(numfichreg, codfichreg, obs) values(... ;",$linkalaconexiondedb); mysql_query("insert into propietario(idprop, nombreprop..., numfichregprop, obs1) values(... ;",$linkalaconexiondedb); arriba numfichregprop es FK mysql_query("insert into conductor(idcond, nombrecond..., numfichregcond, obs2) values(... ;",$linkalaconexiondedb); arriba numfichregcond es FK mysql_query("insert into vehiculo(idvehi, placa, color, modelo..., numfichregvehi, obs) values(... ;",$linkalaconexiondedb); numfichregvehi es FK Y asi amigos cuando uso el script con diferentes valores tanto para numfichreg y los PK diferentes de las otrs tres tablas si inserta bien, estuve happy pero por ahi se me ocurrio enviar una insercion vacia y el script en donde puse mysql_errno y mysql_error me dice que solo hay duplicidad en PK de la tabla vehiculo y que es FK algo asi, pero los demas PK que nada e inserta algunos, pero me di cuenta que en vehiculo no inserta osea en resumidas cuentas SE NOTA QUE ALGO ANDA MAL :( > > Las pk son propias de cada tabla, es decir puedo tener la tabla1 con esta= s > pk > 1,2,3,4,5 > la tabla2 con > 1,3,4 > y si intento hacer un insert en la tabla3 vacia le va a importar un comin= o > el > valor que le ponga en la pk > Por otro lado si intento a=F1adir un registro a la tabla2 con pk=3D4 me d= ar=E1 un > fallo de pk duplicada > >> para insertar he usado: >> >> mysql_query("insert into tabla1 (campos) values(...);",$link); >> mysql_query("insert into tabla2 (campos) values(...);",$link); >> mysql_query("insert into tabla3 (campos) values(...);",$link); >> mysql_query("insert into tabla4 (campos) values(...);",$link); > > Sin saber los datos que est=E1s metiendo es muy d=EDficil saber que est= =E1s > haciendo mal Ojla que con los datitos arriba te aclare mas mi escenario :(, le pongo todas las ganas pero ahora si creo que necesito ayuda :( > > Un ejemplo de inserci=F3n cl=E1sica ser=EDa > > mysql_query('insert into tabla1(campo2) values ("bla");') //la pk se rell= ena > automaticamente en mi caso no es auto_increment no se llena automaticamente debo poner yo, pero ya estoy descartando ello, creo que usare un id autoincremente... > $VARIABLE=3Dmysql_insert_id(); //Para obtener el pk del =FAltimo valor > insertado Ok ahi le dice que hay un PK en la, primera tabla, verdad? > mysql_query('insert into tabla2(campo222, campo1, campo2222) values ("foo= ", > $VARIABLE, "bar");); $variable es un indicador solamente? chispas parece un valor mas :(, creo que es un valor y comun, pero el campo comun para mi era campo1 uyyy no me estare haciendo bolas? :( > //De nuevo omitimos la pk, que se genera de forma automatica, metemos los > valores que queremos > //y hacemos que campo1 relacione con el registro que hemos metido antes e= n > la primera query > mysql_query('insert into tabla3(campo1, campo33) values ($VARIABLE, > "dei");); > mysql_query('insert into tabla4(campo444, campo1) values ("doi", > $VARIABLE);); Algo habia leido por ahi, nunca lo vi solo lo busque cuando ya habia hecho las pruebas, voy a intentar hacer eso amigo > > > M=E1s o menos algo as=ED, aparte en php no se recomienda usar mysql_inser= t_id() > y se prefiere > que utilices las opciones que te proporcionan mysqli o pdo en su lugar > http://php.net/manual/en/function.mysql-insert-id.php ok lo vere, MUCHAS GRACIAS POR TU AYUDA, SALUDOS. > > Un saludo > > -- > Celso Gonz=E1lez (@PerroVerd) > http://cantera-tech.com > > -- > Lista de Correos de MySQL > Para el historial de la lista: http://lists.mysql.com/mysql-es > Para cancelar inscripci=F3n: http://lists.mysql.com/mysql-es > > --=20 "UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity." -- Dennis M. Ritchie Mis bits: http://bitsenlared.wordpress.com Live free or die!