Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

MYSQL Consultar e insertar datos al mismo tiempo

Estas en el tema de MYSQL Consultar e insertar datos al mismo tiempo en el foro de Mysql en Foros del Web. Usuarios __________________________________________________ _______ id_usuario|id_estado| nombre| calle| colonia| cp| mpo| telefono| correo ________|________|_____ _|____|______|__ |___ |______ |______ ________|________|______ |____|______|__ |____|______ |______ ________|________|______ |____|______|__ |____|______ |______ Estados ...
  #1 (permalink)  
Antiguo 13/03/2008, 14:12
Avatar de chclaudio  
Fecha de Ingreso: marzo-2008
Mensajes: 16
Antigüedad: 16 años, 1 mes
Puntos: 0
Mensaje 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.
  #2 (permalink)  
Antiguo 15/03/2008, 13:30
Avatar de pragone  
Fecha de Ingreso: diciembre-2007
Ubicación: Madrid
Mensajes: 223
Antigüedad: 16 años, 4 meses
Puntos: 2
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
__________________
pragone
Blog: Desarrollo, comunidad y monetización
Últimos artículos: Tips de Smarty
  #3 (permalink)  
Antiguo 15/03/2008, 14:02
Avatar de Adolfiten  
Fecha de Ingreso: enero-2008
Ubicación: Frente a mi monitor...
Mensajes: 572
Antigüedad: 16 años, 3 meses
Puntos: 7
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.
  #4 (permalink)  
Antiguo 15/03/2008, 15:37
Avatar de deadlykyo  
Fecha de Ingreso: noviembre-2005
Ubicación: Cbba - Bolivia
Mensajes: 747
Antigüedad: 18 años, 4 meses
Puntos: 5
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
__________________
"El Conocimiento es de todos, no solo de algunos"
  #5 (permalink)  
Antiguo 16/03/2008, 14:16
Avatar de chclaudio  
Fecha de Ingreso: marzo-2008
Mensajes: 16
Antigüedad: 16 años, 1 mes
Puntos: 0
De acuerdo

Cita:
Iniciado por pragone Ver Mensaje
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 Ver Mensaje
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 Ver Mensaje
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

Última edición por BrujoNic; 16/03/2008 a las 23:55
  #6 (permalink)  
Antiguo 17/03/2008, 07:06
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
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?
  #7 (permalink)  
Antiguo 22/06/2008, 13:20
Avatar de fermar21  
Fecha de Ingreso: marzo-2004
Ubicación: San Nicolas - Bs. As.
Mensajes: 294
Antigüedad: 20 años
Puntos: 0
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,
__________________
Fernando Marinzulich
Programador Web (PHP/MySQL/Jquery)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




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