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

Insert ...On Duplicated Update + last_insert_id()

Estas en el tema de Insert ...On Duplicated Update + last_insert_id() en el foro de Mysql en Foros del Web. Buenas. Necesitoo AYUDA con un insert "condicional". Resulta que quiero meter un nuevo registro si es nuevo, pero si existe, pues quiero que actualice el ...
  #1 (permalink)  
Antiguo 20/04/2011, 08:17
 
Fecha de Ingreso: marzo-2007
Mensajes: 5
Antigüedad: 17 años, 8 meses
Puntos: 0
Pregunta Insert ...On Duplicated Update + last_insert_id()

Buenas. Necesitoo AYUDA con un insert "condicional".

Resulta que quiero meter un nuevo registro si es nuevo, pero si existe, pues quiero que actualice el existente. He estado leyendo y parece uqe la consulta sería la siguiente:

Código:
INSERT INTO t (c1,c2,c3)
VALUES('v1','v2',v3)
ON DUPLICATE KEY UPDATE c2='v2';
Supongamos que c0 es la primary key, y es un autoincremental.

Pues bien, hasta ahi todo parece correcto, El problema viene cuando intento recuperar el id del ultimo registro tocado desde PHP con mysqli_insert_id(), tanto si se ha insertado nuevo, como si se ha actualizado alguno.

Tal cual está la consulta me devuelve 0. Deduzco que es por que lo último que se hace es comprobar el update, y tanto si se inserta alguno como si se actualiza es 0.

Leyendo por ahi, parece que habría que añadir el id a la clausula Update para que lo actualizace con el valor de la funcion mysql LAST_INSERT_ID

Código:
INSERT INTO t (c1,c2,c3) 
VALUES('v1','v2',v3) 
ON DUPLICATE KEY UPDATE c0=LAST_INSERT_ID(c0), c1='v2';
Pero no me devuelve el id del ultimo registro tocado, sino el siguiente (que no existe. Ademas si hago otra insercion diferente a futuro, el siguiente ID autoincremental que me mete no es el siguiente de la tabla, sino otro que depende del numero de veces uqe se haya ejecutado la clausura On DUPLICATE KEY UPDATE.

¿Alguien sabe por qeu psa esto? ¿Como puedo solucionar mi problema de conseguir el ID del último registro tocado?

Última edición por yerex_tf; 20/04/2011 a las 10:29

Etiquetas: duplicate, hey, last_insert_id, update
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:15.