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

[SOLUCIONADO] Problema con update en mysql

Estas en el tema de Problema con update en mysql en el foro de Mysql en Foros del Web. Buenas tardes colegas,,, traigo un problemita al querer hacer un update un tanto peculiar... quiero hacer algo así,,, @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original UPDATE ...
  #1 (permalink)  
Antiguo 21/06/2013, 10:40
 
Fecha de Ingreso: junio-2012
Ubicación: Venezuela
Mensajes: 68
Antigüedad: 11 años, 10 meses
Puntos: 6
Exclamación Problema con update en mysql

Buenas tardes colegas,,, traigo un problemita al querer hacer un update un tanto peculiar... quiero hacer algo así,,,

Código MySQL:
Ver original
  1. UPDATE sicoa.propuesta SET ultimo_status=7
  2. where  numero_propuesta = 45 and id_propuesta = max(id_propuesta)

Esta consulta me da este error:
Invalid use of group function


tambien intenté hacer algo así

Código MySQL:
Ver original
  1. UPDATE sicoa.propuesta SET ultimo_status=7
  2. where id_propuesta = (SELECT   max(id_propuesta)  FROM   sicoa.propuesta  WHERE  numero_propuesta = 45)

Esta consulta me da este error:
You can't specify target table 'propuesta' for update in FROM clause

Se que el error que me da la segunda consulta es que no puedo hacer un select de la misma tabla a la que intento actualizar...

Alguien tiene alguna idea de como hacer eso,, traduciendo el requerimiento es poder insertar un nuevo estatus al id_propuesta mas alto del numero_propuesta... en este caso 45 es un número variable,,,

Espero me entiendan y puedan ayudar... muchas gracias

Saludos

Última edición por MagoMarlon; 21/06/2013 a las 10:46
  #2 (permalink)  
Antiguo 21/06/2013, 11:28
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: Problema con update en mysql

Habría que probar esto:
Código MySQL:
Ver original
  1. UPDATE sicoa.propuesta
  2. SET ultimo_status=7
  3. WHERE  numero_propuesta = 45
  4. ORDER BY id_propuesta DESC
Francamente no lo hice antes, así que hay que ver cuan bien se ejecuta.
DE todos las buenas prácticas aconsejan meter cosas así en stored procedures, y no en sentencias simples, o al menos no intentarlo en sentencias únicas.
Ayuda a no cometer errores.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 21/06/2013, 11:47
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Problema con update en mysql

Hola MagoMarlon:

Lo que quieres hacer, lo vas a tener que hacer por partes, o meterlo en un procedimiento almacenado. El primer UPDATE no funciona porque no es posible utilizar la función MAX dentro de la sección WHERE de una consulta, ya que este es un campo calculado que existe sólo hasta que se termina de ejecutar la consulta...

La segunda consulta no funciona porque no puedes utilizar la misma tabla que vas a actualizar dentro de una subconsulta, porque se crea un conflicto.

http://dev.mysql.com/doc/refman/5.0/...ry-errors.html

Intentalo así:

Código MySQL:
Ver original
  1. UPDATE sicoa.propuesta T1
  2. (SELECT   max(id_propuesta) max_id
  3. FROM   sicoa.propuesta  
  4. WHERE  numero_propuesta = 45) T2 ON T1.id = T2.max_id
  5. SET ultimo_status=7

Otra solución sería que hagas la consulta en dos partes, por un lado obtener el MAX(id_propuesta) que quieres actualizarlo y almacenarlo en una variable y utilizar esa variable en el UPDATE.

Haz la prueba y nos comentas.

Saludos
Leo.
  #4 (permalink)  
Antiguo 21/06/2013, 12:06
 
Fecha de Ingreso: junio-2012
Ubicación: Venezuela
Mensajes: 68
Antigüedad: 11 años, 10 meses
Puntos: 6
Respuesta: Problema con update en mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Habría que probar esto:
Código MySQL:
Ver original
  1. UPDATE sicoa.propuesta
  2. SET ultimo_status=7
  3. WHERE  numero_propuesta = 45
  4. ORDER BY id_propuesta DESC
Francamente no lo hice antes, así que hay que ver cuan bien se ejecuta.
DE todos las buenas prácticas aconsejan meter cosas así en stored procedures, y no en sentencias simples, o al menos no intentarlo en sentencias únicas.
Ayuda a no cometer errores.
Grande! Funciona a la perfeccion amigo... no quise hacer un procedimiento almacenado porque la aplicación no es mia, estoy haciendole un pequeño mantenimiento y no conosco muy bien la estructura de tablas e incluso no mucho el fuente... La verdad no quiero involucrarme tanto, la aplicación está muy mal hecha y no corregiré la gran cantidad de errores que tiene,, por eso mas bien quiero darle un mateito porque no me gustra trabajar con aplicaciones así.

Pero muchas gracias,, esta es la solución que necesitaba, si funciona ;)
  #5 (permalink)  
Antiguo 21/06/2013, 12:07
 
Fecha de Ingreso: junio-2012
Ubicación: Venezuela
Mensajes: 68
Antigüedad: 11 años, 10 meses
Puntos: 6
Respuesta: Problema con update en mysql

Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola MagoMarlon:

Lo que quieres hacer, lo vas a tener que hacer por partes, o meterlo en un procedimiento almacenado. El primer UPDATE no funciona porque no es posible utilizar la función MAX dentro de la sección WHERE de una consulta, ya que este es un campo calculado que existe sólo hasta que se termina de ejecutar la consulta...

La segunda consulta no funciona porque no puedes utilizar la misma tabla que vas a actualizar dentro de una subconsulta, porque se crea un conflicto.

http://dev.mysql.com/doc/refman/5.0/...ry-errors.html

Intentalo así:

Código MySQL:
Ver original
  1. UPDATE sicoa.propuesta T1
  2. (SELECT   max(id_propuesta) max_id
  3. FROM   sicoa.propuesta  
  4. WHERE  numero_propuesta = 45) T2 ON T1.id = T2.max_id
  5. SET ultimo_status=7

Otra solución sería que hagas la consulta en dos partes, por un lado obtener el MAX(id_propuesta) que quieres actualizarlo y almacenarlo en una variable y utilizar esa variable en el UPDATE.

Haz la prueba y nos comentas.

Saludos
Leo.
Esto si no me funcionó amigo :/ la respuesta de gnzsoloyo si. Gracias por responder. Saludos...

Etiquetas: mysql+consulta, 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 05:53.