Ver Mensaje Individual
  #1 (permalink)  
Antiguo 20/04/2011, 08:17
yerex_tf
 
Fecha de Ingreso: marzo-2007
Mensajes: 5
Antigüedad: 17 años, 1 mes
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