List:Spanish« Previous MessageNext Message »
From:Tranc3 Music Date:January 30 2013 6:07pm
Subject:Re: Insertar registros en varias tablas (mysql-php)
View as plain text  
El 30/01/13, Celso González <celso@stripped> escribió:
> 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


Muchisimas gracias por responder! te estoy muy agradecido, te detallo mas:

Estoy haciendo una pequeña aplicacion para una empresa de taxis
pequeña 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ó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


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 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


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ón clásica sería
>
> mysql_query('insert into tabla1(campo2) values ("bla");') //la pk se rellena
> 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=mysql_insert_id(); //Para obtener el pk del último 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 en
> 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á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

ok lo vere, MUCHAS GRACIAS POR TU AYUDA, SALUDOS.
>
> Un saludo
>
> --
> Celso González (@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ón: http://lists.mysql.com/mysql-es
>
>


-- 
"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!
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