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

last_insert_id para recuperar datos

Estas en el tema de last_insert_id para recuperar datos en el foro de Mysql en Foros del Web. hola, ojala me puedan ayudar con la siguiente consulta. si tengo una tabla de la siguiente forma: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original create table ...
  #1 (permalink)  
Antiguo 18/07/2011, 09:04
 
Fecha de Ingreso: abril-2010
Mensajes: 36
Antigüedad: 14 años
Puntos: 2
Pregunta last_insert_id para recuperar datos

hola, ojala me puedan ayudar con la siguiente consulta.

si tengo una tabla de la siguiente forma:

Código MySQL:
Ver original
  1. create table tabla(
  2. cod_sup char(5) not null ,
  3. cod_tabla char(5) not null ,
  4. des_tabla varchar(45) not null ,
  5.  
  6. unique index num_auto_unique (num_auto asc) ,
  7. primary key (cod_sup, cod_tabla) );

y quisiera recuperar los datos, incluyendo las llaves primarias, luego de haber hecho un insert utilizando un sp.
(1) seria correcto utilizar el siguiente codigo, al final del sp, para recuperar los datos?
(2) es mejor utilizar el campo auto_increment como primary key o como unique?

Código MySQL:
Ver original
  1. cod_sup,
  2. cod_tabla,
  3. des_tabla,
  4. num_auto
  5. from tabla
  6. where num_auto=last_insert_id();

(3) si quisiera que el campo cod_tabla sea un numero correlativo que dependa del campo cod_sup, como podria hacerlo sin que sea un campo auto_increment? para que se guarde de la siguiente forma:

Código HTML:
Ver original
  1. cod_sup     cod_tabla
  2. 01             00001
  3. 01             00002
  4. 01             00003
  5. 02             00001
  6. 02             00002

podria guardar la siguiente variable, declarada y definida al inicio del sp, en ese campo?

Código MySQL:
Ver original
  1. declare var_cod_tabla char(5);
  2.  
  3. set var_cod_tabla=
  4. (select max(cod_tabla)
  5. from tabla
  6. where cod_sup=param_cod_sup)
  7. ,0)+1
  8. ,5,'0');

muchas gracias por su ayuda
  #2 (permalink)  
Antiguo 18/07/2011, 09:20
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: last_insert_id para recuperar datos

Yo definiria el num_auto como pk autoincremental y sobre los campos que has definido como pk definiria un indice compuesto unique. Definir un indice unico sobre un campo autoincremental és inutil puesto que ya lo tienes asegurado con el hecho de ser autoincremental, y siempre te será mas secillo tabajar con un PK simple que con una compuesta.


En cuanto a cod_tabla en si lo sabes calcular debes hacer que en el momento que el SP lance el inser tenga en cuenta ese valor que has calculado...
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 18/07/2011, 15:43
 
Fecha de Ingreso: abril-2010
Mensajes: 36
Antigüedad: 14 años
Puntos: 2
Respuesta: last_insert_id para recuperar datos

gracias por tu respuesta quimfv.
en caso se este utilizando auto_increment, el select que he colocado como ejemplo es la mejor forma de saber que datos se han insertado?

gracias
  #4 (permalink)  
Antiguo 19/07/2011, 00:46
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: last_insert_id para recuperar datos

Si el auto_increment es la pk solo con la funcion last_insert_id() ya sabes que datos se han insertado. No se que quieres hacer con esos datos pero lo importante es que no necesitas ese select, puedes usar last_insert_id() en otra query para hacer lo que quieras...
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Etiquetas: recuperar, select, tabla
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 23:48.