Ver Mensaje Individual
  #17 (permalink)  
Antiguo 23/12/2010, 13:31
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: ayuda con insert on duplicate key update

Bien, es entonces como lo suponía: una tabla que representa la relación N:M entre otras dos.

Si esto es una muestra de datos real:



Esto:
Código MySQL:
Ver original
  1. UPDATE mw_noticias2_mw_portafolios SET id_portafolio = 3 WHERE id_noticias = 34;
simplemente no puede funcionar porque hay al menos tres registros que tienen 34 en id_noticias, y si se ejecuta ese UPDATE no puede funcionar ni con el primero (34,1), porque ya existe un (34,3).

La única forma en que pueda darse que haya más de una instancia del par (34,3) es si y sólo si la PK de esa tabla posee algún discriminante, es decir otro campo más que permita diferenciar el par (34,3) al que haces referencia, y para ello la PK debería ser por lo menos de 3 campos.
¿Se entiende el problema?

Para que tu UPDATE pueda ejecutarse, tu tabla debe admitir esto:
Código MySQL:
Ver original
  1. --------------------------
  2. |id_noticia|id_portafolio|
  3. --------------------------
  4. |         34|            3|
  5. --------------------------
  6. |         34|            3|
  7. --------------------------
  8. |         34|            3|
  9. --------------------------
Y eso es imposible dada la definición actual de la tabla.
Se necesitaría algo así:
Código MySQL:
Ver original
  1. -----------------------------
  2. |id_noticia|id_portafolio|id|
  3. -----------------------------
  4. |         34|            3|1|
  5. -----------------------------
  6. |         34|            3|2|
  7. -----------------------------
  8. |         34|            3|3|
  9. -----------------------------

¿Se comprende ahora?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)