From: Celso González Date: January 30 2013 2:11pm Subject: Re: Insertar registros en varias tablas (mysql-php) List-Archive: http://lists.mysql.com/mysql-es/3954 Message-Id: <20130130141139.GA23311@mitago.net> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit 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ño de la base de datos :( En principio no tiene porque estar mal, sin conocer los datos parece más o menos correcto, aunque puede que no sea la solución optima > 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ón 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á algo confuso, estoy suponiendo que las tablas tienen el autoincrement en la pk, aunque si no fuese así las explicaciones serían las mismas Las pk son propias de cada tabla, es decir puedo tener la tabla1 con estas 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 comino el valor que le ponga en la pk Por otro lado si intento añadir un registro a la tabla2 con pk=4 me dará 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ás metiendo es muy díficil saber que estás haciendo mal Un ejemplo de inserción clásica sería mysql_query('insert into tabla1(campo2) values ("bla");') //la pk se rellena automaticamente $VARIABLE=mysql_insert_id(); //Para obtener el pk del último valor insertado mysql_query('insert into tabla2(campo222, campo1, campo2222) values ("foo", $VARIABLE, "bar");); //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 en la primera query mysql_query('insert into tabla3(campo1, campo33) values ($VARIABLE, "dei");); mysql_query('insert into tabla4(campo444, campo1) values ("doi", $VARIABLE);); Más o menos algo así, aparte en php no se recomienda usar mysql_insert_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 Un saludo -- Celso González (@PerroVerd) http://cantera-tech.com