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

ayuda con insert on duplicate key update

Estas en el tema de ayuda con insert on duplicate key update en el foro de Mysql en Foros del Web. Hola muchachos, acá de nuevo a solicitar por favor su valiosa ayuda, el problema mío es el siguiente: Hace poco arregle una tabla que tenía ...
  #1 (permalink)  
Antiguo 23/12/2010, 09:08
 
Fecha de Ingreso: febrero-2010
Mensajes: 41
Antigüedad: 14 años, 2 meses
Puntos: 0
Exclamación ayuda con insert on duplicate key update

Hola muchachos, acá de nuevo a solicitar por favor su valiosa ayuda, el problema mío es el siguiente: Hace poco arregle una tabla que tenía serios problemas de normalización, la función que hace la tabla es guardar los ids de cada albúm fotográfico y a su vez guarda el id del documento, como se ve en la foto
He ocupado el insert on duplicate key update y no me resulta, me actualiza mal y me sobreescribe los valores anteriores del campo portafolio, pregunta ¿Cómo podría actualizar los ids sin que se volviera sobreescribieran los valores? he intentado con UPDATE y me sale que no se puede por duplicidad de claves. muchas gracias
  #2 (permalink)  
Antiguo 23/12/2010, 10:08
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: ayuda con insert on duplicate key update

¿Cuál es la relación con las demás tablas? ¿un portafolio puede estar relacionado con una única noticia? ¿cuál es el PRIMARY KEY?
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 23/12/2010, 10:15
 
Fecha de Ingreso: febrero-2010
Mensajes: 41
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: ayuda con insert on duplicate key update

Hola David, te respondo una noticia puede estar relacionada con muchos portafolios y la clave primaria en la tabla es doble o sea id_noticias2 y id_portafolio

gracias
  #4 (permalink)  
Antiguo 23/12/2010, 10:20
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: ayuda con insert on duplicate key update

La pregunta era si un portafolio también puede estar relacionado con varias noticias.

¿Cuáles son los datos que se sobreescriben?
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 23/12/2010, 10:32
 
Fecha de Ingreso: febrero-2010
Mensajes: 41
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: ayuda con insert on duplicate key update

te respondo un portafolio es relacionado con una noticia. Los datos que se sobreescriben es en el campo id_portafolio cuando quiere hacer un UPDATE asi lo hago y me sale error: "UPDATE mw_noticias2_mw_portafolios SET id_portafolio = 3 WHERE id_noticias = 34;".
  #6 (permalink)  
Antiguo 23/12/2010, 10:39
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: ayuda con insert on duplicate key update

Si entiendo lo que quieres hacer, lo que necesitas en realidad es usar IGNORE:
Código MySQL:
Ver original
  1. INSERT IGNORE INTO m2_noticas2_mw_portafolios (id_noticias2, id_portafolio) VALUES (34, 3);
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #7 (permalink)  
Antiguo 23/12/2010, 10:40
 
Fecha de Ingreso: febrero-2010
Mensajes: 41
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: ayuda con insert on duplicate key update

Gracias, pero me sirviría para actualizar?
  #8 (permalink)  
Antiguo 23/12/2010, 10:42
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: ayuda con insert on duplicate key update

¿Qué es lo que necesitarías actualizar?
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #9 (permalink)  
Antiguo 23/12/2010, 10:44
 
Fecha de Ingreso: febrero-2010
Mensajes: 41
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: ayuda con insert on duplicate key update

asi es, el campo a actualizar es id_portafolio
  #10 (permalink)  
Antiguo 23/12/2010, 10:46
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: ayuda con insert on duplicate key update

¿Cuándo? ¿Con qué condición? ¿En qué contexto?
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #11 (permalink)  
Antiguo 23/12/2010, 10:56
 
Fecha de Ingreso: febrero-2010
Mensajes: 41
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: ayuda con insert on duplicate key update

tengo dos consultas para actualizar el campo "id_portafolio" esta:
Código MySQL:
Ver original
  1. UPDATE mw_noticias2_mw_portafolios SET id_portafolio = 3 WHERE id_noticias = 34;
y la segunda:
Código MySQL:
Ver original
  1. UPDATE mw_noticias2_mw_portafolios SET id_portafolio = 3 WHERE id_portafolio = 2;
No te entiendo cuando te refieres ¿En qué contexto?
  #12 (permalink)  
Antiguo 23/12/2010, 11:12
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: ayuda con insert on duplicate key update

¿Qué pretendes actualizar? La primera consulta no tiene mucho sentido, ya que varios registros cumplen con la condición id_noticias = 34, ¿cuál de esos registros es el que quieres actualizar?
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #13 (permalink)  
Antiguo 23/12/2010, 11:13
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: ayuda con insert on duplicate key update

Si la tabla es una tabla que representa una relación N:M entre otras dos, y ambos campos son PK de esa tabla (además de ser FK), tienes que revisar que no se de que al actualizar ese campo id_portafolio se esté generando una clave duplicada de otro registro.
¿Es ese el caso?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 23/12/2010, 12:22
 
Fecha de Ingreso: febrero-2010
Mensajes: 41
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: ayuda con insert on duplicate key update

gnzsoloyo, el caso que me planteas es correcto pero la duplicidad solo se manifiesta en la tabla que he citado solo me urge actualizar la columna id_portafolio
  #15 (permalink)  
Antiguo 23/12/2010, 12:32
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: ayuda con insert on duplicate key update

Cita:
gnzsoloyo, el caso que me planteas es correcto pero la duplicidad solo se manifiesta en la tabla que he citado solo me urge actualizar la columna id_portafolio
Que sólo se manifieste en esa tabla no es óbice para que ese no sea el caso.

Es evidente que al pretender la actualización estás generando una tabla duplicada, pero para entender mejor el origen problema sería buena idea que postearas la estructura y relaciones de la/s tabla/s involucradas, porque allí es donde se produce el problema. Si sabemos cómo se compone y de dónde saca las claves, será mucho más fácil comprender cómo se produce la duplicación.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #16 (permalink)  
Antiguo 23/12/2010, 13:20
 
Fecha de Ingreso: febrero-2010
Mensajes: 41
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: ayuda con insert on duplicate key update

esta es la relacion
  #17 (permalink)  
Antiguo 23/12/2010, 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: 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)
  #18 (permalink)  
Antiguo 23/12/2010, 13:57
 
Fecha de Ingreso: febrero-2010
Mensajes: 41
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: ayuda con insert on duplicate key update

si pero como ocuparía el campo id en la tabla? y también tomando la primera imagen como base
  #19 (permalink)  
Antiguo 23/12/2010, 18:24
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: ayuda con insert on duplicate key update

Lo siento, pero ¿realmente te interesa tener guardado 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. --------------------------
¿Tiene algún sentido para tí? ¿Representa alguna utilidad?

¿Qué es exactamente lo que para tí tiene que guardarse en esa tabla?

Pregunto, porque desde el punto de vista de datos, no tiene mucho sentido. Se trata de una repetición sin ninguna utilidad aparente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #20 (permalink)  
Antiguo 24/12/2010, 06:43
 
Fecha de Ingreso: febrero-2010
Mensajes: 41
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: ayuda con insert on duplicate key update

si tengo que guardar los datos, pero ¿habría otra solución para esto?
  #21 (permalink)  
Antiguo 24/12/2010, 06:47
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: ayuda con insert on duplicate key update

Perdona, pero si no me respondes todas las preguntas, la idea me resulta confusa. El problema que le veo es que estás guardando tres veces la misma información. ¿Por qué? Con una vez por cada relación es suficiente, ¡para qué lo necesitas tres veces.
Poner repetidos los datos te generaría inconsistencia de datos eventualmente, y muy probables productos cartesianos en las consultas.

¿Cuál es el objeto de poner datos redundantes?

El tema aquí es que el modelo relacional se basa, entre otras cosas, en evitar la redundancia y tu quieres crearla intencionalmente, pero como el SQL respeta las restricciones creadas en la base, no puede ejecutar la consulta como la propones.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 26/12/2010 a las 19:01

Etiquetas: duplicate, insert, key, 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 02:47.