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

varios LAST_INSERT_ID() en una consulta.

Estas en el tema de varios LAST_INSERT_ID() en una consulta. en el foro de Mysql en Foros del Web. hola gente que tal? vengo con un problema que nose como arreglar. el tema es asi, tengo una multiconsulta que ejecuto toda junta, la consulta ...
  #1 (permalink)  
Antiguo 03/12/2012, 12:39
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años
Puntos: 320
varios LAST_INSERT_ID() en una consulta.

hola gente que tal? vengo con un problema que nose como arreglar. el tema es asi, tengo una multiconsulta que ejecuto toda junta, la consulta en si es esta:

Código MySQL:
Ver original
  1. INSERT INTO ven VALUES( '' , '2012-12-03' , '1' , '3' , '' , '60', 20 , '1');
  2. INSERT INTO ved VALUES( LAST_INSERT_ID() , '1' , '1' , '60' );
  3. UPDATE tda SET STO=STO-1 WHERE IDA=1;
  4. INSERT INTO dcc VALUES('' , LAST_INSERT_ID() , DATE_ADD('2012-12-03',INTERVAL 1 MONTH));
  5. INSERT INTO icc VALUES(LAST_INSERT_ID() , '1' , '2012-12-03' , '20');
  6. INSERT INTO mcd VALUES( '' , '2012-12-03' , '1' , 20 , '7' , LAST_INSERT_ID() , '1');
  7. UPDATE inf SET VAL=VAL + 20 WHERE IDI='1'

en el primer insert inserto el valor de una venta y el autoincrement del id se guarda correctamente, el tema es que en los insert posteriores yo nesesito ciempre ese id del primer insert, y como, luego hago otros insert autoincrement, ese valor se pierde (en realidad me da error, no estoy seguro de que es lo que pasa de fondo ), alguien conoce una forma de solucionar este problema? tal vez definiendo una costante o algo asi, pero nose si se puede, muchas gracias
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #2 (permalink)  
Antiguo 03/12/2012, 12:44
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, 5 meses
Puntos: 2658
Respuesta: varios LAST_INSERT_ID() en una consulta.

No se puede.
Esa función aplica sólo al último ID generado en cualquier tabla, pero sólo el ultimo generado en la última tabla donde se hizo el insert y luego de ejecutado el mismo, y no mientras.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 03/12/2012, 12:56
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años
Puntos: 320
Respuesta: varios LAST_INSERT_ID() en una consulta.

hola gnzaloyo, gracias una vez mas por tu ayuda, pues que inconveniente que no se pueda :S
no conoces alguna otra forma de solucionarlo desde Mysql unicamente o no queda mas remedio que recurrir a php?

otra pregunta que estube buscando y no encontre nada, se pueden definir constantes en una consulta mysql?

es decir algo como:

Código MySQL:
Ver original
  1. CONS HOLA = 'Saludos'; INSERT INTO tabla VALUES('' , HOLA , '40');

lo que escribi se que es una animalada, pero existe algo paracido a eso?
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #4 (permalink)  
Antiguo 03/12/2012, 13:31
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, 5 meses
Puntos: 2658
Respuesta: varios LAST_INSERT_ID() en una consulta.

MySQL carece de constantes. Todo son variables.
Lo que si puedes hacer es crear variables de sesión que conservan su valor mientras dura laconexión creada en la aplicación, manteniendo siempre el último valor cargado.
Estas variables no se declaran, sino que se inicializan directamente al asignarles un valor. Por eso mismo tampoco tienen tipo de dato especificado, y sólo adquieren el de la asignación.
Se las define con "@", y sería algo como:
Código MySQL:
Ver original
  1. SET @variable = 13565;
  2. SET @variable = 'Hola, Mundo';
  3. SET @variable = NOW();
Si ejecutases esto y luego
Código MySQL:
Ver original
  1. SELECT @variable;
obtendrías nada más que el resultado de NOW(), ya que en cada paso su valor cambió.
Por ejemplo:
Código MySQL:
Ver original
  1. SET @variable = 13565;
  2. SELECT @variable;
  3. SET @variable = 'Hola, Mundo';
  4. SELECT @variable;
  5. SET @variable = NOW();
  6. SELECT @variable;

En definitiva, es el único caso.
Incluso, si esta variables la usas dentro de un SP, luego de terminar la ejecución del mismo, puedes volver a leerla luego de un rato, y seguirá con el mismo valor que la última asignación en el SP.

Nota: Las variables que se declaran son sólo las locales del SP, que no llevan "@Ç", y mueren al terminar su ejecución.

No confundirlas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 03/12/2012, 13:58
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años
Puntos: 320
Respuesta: varios LAST_INSERT_ID() en una consulta.

GENIAL! GENIAL! :D lo solucione!

muchas gracias por tus explicaciones impecables como de costumbre!

Código MySQL:
Ver original
  1. INSERT INTO ven VALUES( '' , '2012-12-03' , '1' , '3' , '' , '60', 20 , '1');
  2. SET @UltimoID = LAST_INSERT_ID();
  3. INSERT INTO ved VALUES( @UltimoID , '1' , '1' , '60' );
  4. UPDATE tda SET STO=STO-1 WHERE IDA=1;
  5. INSERT INTO dcc VALUES('' , @UltimoID , DATE_ADD('2012-12-03',INTERVAL 1 MONTH));
  6. INSERT INTO icc VALUES( @UltimoID , '1' , '2012-12-03' , '20' , '');
  7. INSERT INTO mcd VALUES( '' , '2012-12-03' , '1' , 20 , '7' , @UltimoID , '1');
  8. UPDATE inf SET VAL=VAL + 20 WHERE IDI='1;

con eso uso el primer id autoncrementado que se crea en los demas :D

muchas gracias de nuevo sos un idolo en bases de datos!
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #6 (permalink)  
Antiguo 03/12/2012, 14:09
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, 5 meses
Puntos: 2658
Respuesta: varios LAST_INSERT_ID() en una consulta.



Me alegra que te sirviera.

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
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




La zona horaria es GMT -6. Ahora son las 18:07.