Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Mysql (http://www.forosdelweb.com/f86/)
-   -   MYSQL Consultar e insertar datos al mismo tiempo (http://www.forosdelweb.com/f86/mysql-consultar-e-insertar-datos-mismo-tiempo-565834/)

chclaudio 13/03/2008 14:12

MYSQL Consultar e insertar datos al mismo tiempo
 
Usuarios
__________________________________________________ _______
id_usuario|id_estado| nombre| calle| colonia| cp| mpo| telefono| correo
________|________|_____ _|____|______|__ |___ |______ |______
________|________|______ |____|______|__ |____|______ |______
________|________|______ |____|______|__ |____|______ |______
Estados
id_estado | nom_estado
_________________________
01 | Aguascalientes
02 | Baja California
03 | Baja California Sur
04 | Campeche
05 | Chiapas
06 | Chihuahua
07 | Coahuila

Tengo una tabla llamada usuarios la cual se encuentra totalmente vacía.
También tengo otra tabla llamada Estados en la cual están almacenados todos los estados de México más el DF.,

Hasta aquí todo esta bien
Ahora el problema viene cuando deseo ingresar datos en la tabla usuarios y al mimo tiempo ingresar el id_estado en la tabla usuarios ejemplo.

Insert into usuarios (id_estado, nombre, calle, colonia, cp, mpo, telefono, correo) values (´id_estado´, ´Claudio´, ‘Montes de oca’, ´Pueblo Viejo´, ´01234´, ´Temixco´, ´0123456´, ´[email protected]´);
Y lo que se obtenga de la siguiente consulta:

Select id_estado from usuarios where nom_estado=´Campeche´;

Pero me gustaría insertar el id_estado al mimo tiempo que todos los demás datos que se encuentran en el insert de arriba.
de antemano agradesco su ayuda.

pragone 15/03/2008 13:30

Re: MYSQL Consultar e insertar datos al mismo tiempo
 
No se me ocurre ahora cómo hacerlo sin recurrir a dos queries.
Primero haz el select, obten el valor del ID y luego usa eso para el otro insert.

Igual es obvio... pero es lo que se me ocurre

Adolfiten 15/03/2008 14:02

Re: MYSQL Consultar e insertar datos al mismo tiempo
 
Son dos sentencias diferentes... en todo el SQL que he visto jamás ví eso. Son cosas muy diferentes una inserción y una selección...

Saludos.

deadlykyo 15/03/2008 15:37

Re: MYSQL Consultar e insertar datos al mismo tiempo
 
chclaudio, es posible hacerlo pero todo depende de tu la aplicacion que usas , supon que en la interfaz ingresan todos esos datos en un formulario, nombre, calle, etc. y tambien seleccionan el estado de algun elemento combo box, ahi tu puedes asignar los pks de cada elemento con el valor que se muestra en el combo box, asi cuando obtienes el elemento puedes recuperar tambien el id de tu base y te evitas la primera consulta, saludos, cya

chclaudio 16/03/2008 14:16

Cita:

Iniciado por pragone (Mensaje 2324484)
No se me ocurre ahora cómo hacerlo sin recurrir a dos queries.
Primero haz el select, obten el valor del ID y luego usa eso para el otro insert.

Igual es obvio... pero es lo que se me ocurre

ok agradesco mucho tu ayuda estamos en contacto

Cita:

Iniciado por Adolfiten (Mensaje 2324513)
Son dos sentencias diferentes... en todo el SQL que he visto jamás ví eso. Son cosas muy diferentes una inserción y una selección...

Saludos.

graciotas, estamos en contacto

Cita:

Iniciado por deadlykyo (Mensaje 2324565)
chclaudio, es posible hacerlo pero todo depende de tu la aplicacion que usas , supon que en la interfaz ingresan todos esos datos en un formulario, nombre, calle, etc. y tambien seleccionan el estado de algun elemento combo box, ahi tu puedes asignar los pks de cada elemento con el valor que se muestra en el combo box, asi cuando obtienes el elemento puedes recuperar tambien el id de tu base y te evitas la primera consulta, saludos, cya

ok agradesco tu ayuda estamos en contacto

gnzsoloyo 17/03/2008 07:06

Re: MYSQL Consultar e insertar datos al mismo tiempo
 
Técnicamente es posible, pero deberías crear un id_estado falso de entrada de modo que pudieras ingresar los datos del registro completo.
Me explico:
1. El objetivo de tener dos tablas distintas para los estados y los usuarios es, sin duda, para una buena normalización y evitar la redundancia de datos que sería incluir el nombre del Estado en cada usuario nuevo.
2. El problema, es que lo que buscas es ingresar los registros de ambos en una sola operación, pero como el del Estado tiene dos campos, o bien mandas los dos valores en el insert del usuario o dejas nulo el del Estado.
3. Como eso no es posible, o de lo contrario el segundo select jamás te devovlería el valor, tienes que mandar los dos datos...
4. Pero la tabla usuario no tiene ese segundo campo, por lo que te daría un error de cantidad de columnas en el INSERT.

Veamos:
1. La primera parte, el insert, es simple: se solucionaría con un TRIGGER, antes de insertar el ID_Estado le mande un REPLACE a la tabla Estados. Digo REPLACE para mandar una sola sentencia, si quieres verificar y después insertar en el trigger, es tu decisión. También sería correcto y no tendrías actualizaciones innecesarias.
2. La segunda parte, en nombre del Estado es la que causa el problema, tienes que enviarla al mismo tiempo.
3. Lo que yo haría es que:
a) la sentencia INSERT reciba un String y no un Integer, siguiendo un modelo como: "#### - XXXXXXXXXXX",
b) el trigger partiría el contenido en dos variables, la primera se la reasignaría al campo entrante, que ahora contendría solamente en Integer, aunque sea en un campo CHAR(), no hay que olvidar que el MySQL es contextual y va a interpretar lo que recibe si se corresponde, con el tipo de campo que debe almacenar; así, si recibe "00012" en un campo INT, lamacenará (12).
c) a su vez las dos partes las enviaría en un INSERT a la tabla estado, suprimiendo el string " - " inicial. Esto simpemente lo puedes hacer con las funciones LEFT() y RIGHT(), predefiniedo con LPAD() que el bloque inicial "####" se rellene con ceros a la izquierda, de modo de recibir siempre la misma longitud de numeros para que el LEFT() y el RIGHT() funcionen bien.

¿Se entiende bien, o te lo pongo en un ejemplo?

fermar21 22/06/2008 13:20

Respuesta: MYSQL Consultar e insertar datos al mismo tiempo
 
Puedes probar con esto pero lo aconsejado es poner todos los estados en un combobox y que el value de cada uno sea el id de su registro. Entonces al leer ese campo, ya tiene el id del estado.

Código PHP:

INSERT INTO usuarios (id_estadonombrecallecoloniacpmpotelefonocorreoVALUES
(
SELECT id_estado'Claudio','Montes de oca''Pueblo Viejo''01234''Temixco''0123456''[email protected]'
FROM estados WHERE nom_estado=´Campeche´


Saludos,


La zona horaria es GMT -6. Ahora son las 00:30.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.