List:Spanish« Previous MessageNext Message »
From:Celso Gonz├ílez Date:January 30 2013 2:11pm
Subject:Re: Insertar registros en varias tablas (mysql-php)
View as plain text  
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
Thread
Insertar registros en varias tablas (mysql-php)Tranc3 Music30 Jan
  • Re: Insertar registros en varias tablas (mysql-php)Celso Gonz├ílez30 Jan
    • Re: Insertar registros en varias tablas (mysql-php)Tranc3 Music30 Jan