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

transladar un valor de la misma tabla haciendo INSERT

Estas en el tema de transladar un valor de la misma tabla haciendo INSERT en el foro de Mysql en Foros del Web. Estoy queriendo actualizar o actualizar una tupla, pero lo hago con la sentencia INSERT y ON DUPLICATE KEY UPDATE. Lo anterior funciona. Ahora, uno de ...
  #1 (permalink)  
Antiguo 07/05/2010, 18:56
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
transladar un valor de la misma tabla haciendo INSERT

Estoy queriendo actualizar o actualizar una tupla, pero lo hago con la sentencia INSERT y ON DUPLICATE KEY UPDATE.

Lo anterior funciona. Ahora, uno de los campos tiene que tomar el valor de otro de los campos de la misma tabla. En vez de hacer primero un SELECT y luego un INSERT, quiero anidar INSERT ... SELECT. Entiendo que eso es valido. Pero no me funciona:
Cita:
"INSERT INTO manual_phpvars (phpvar,value,scope,language,author)

VALUES ('$key','$value',(SELECT scope FROM manual_phpvars WHERE phpvar LIKE '$key' AND language LIKE 'en'),'$whereToUpdate','$author')

ON DUPLICATE KEY UPDATE value='$value'"
(separo en renglones intentando que se lea mas claro)

El error que me da es este:
Cita:
You can't specify target table 'manual_phpvars' for update in FROM clause
Me pueden ayudar?
  #2 (permalink)  
Antiguo 07/05/2010, 19:22
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: transladar un valor de la misma tabla haciendo INSERT

Bueno, la cosa es simple: MySQL no admite que invoques la misma tabla para el UPDATE que en el SELECT asociado.
Además, aunque te funcionase, el SELECT con una clausula LIKE puede llegar a devolver más de un registro, por lo que tendrías un error en tiempo de ejecución si eso sucede, ya que el parser espera recibir un único valor y no varios para asignarlos a un campo...

Empieza por explicar qué es lo que se supone estás cargando, y qué valores corresponde tener... Porque no se comprende paa qué necesitas invocar la propia tabla a los efectos de recuperar un valor..
__________________
¿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 07/05/2010, 19:32
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: transladar un valor de la misma tabla haciendo INSERT

Ok. Cuento de que se trata.

Tengo una serie de valores en mysql que representan variables de php y sus valores en diferentes lenguajes. Entonces, el nombre de la variables va a ser siempre el mismo, pero el valor va a estar en diferentes idiomas.

Las columnas son estas:

id phpvar value scope language author

Yo imprimo en pantalla el nombre de la variable y un <input> para que se traduzca el valor de esa variable. El listado es extenso. Cuando se envia el formulario, lo recibo, y lo proceso como $key = $value, que voy a usar para INSERTAR las traducciones en mysql.

En decir, de este formulario recibo el nombre de la variable y su contenido traducido:

$key = $value

Pero no obtengo el campo scope, que representa el tipo de variable que estoy manejando.

Como el scope de la variable original va a ser el mismo que el scope de la nueva variable (traducida) me pareció factible pedirle el scope a la misma tabla en vez de enviarla por formulario (de hecho, no imagino como enviarla mediante un formulario).

Vi algunos temas donde se pregunta esto mismo, y en vez de usar LIKE usan =, pero esos temas no estan resueltos:

http://www.webmasterworld.com/databa...ql/3680424.htm
http://www.xaprb.com/blog/2006/02/21...date-in-mysql/
http://www.clubdelphi.com/foros/showthread.php?t=31194

Se mencionan cosas como NOW() y también JOIN pero no sabría si implementando algo de eso pueda solucionar lo mio.

Si me ayudan a usar una sintaxis breve, genial. Sino, voy a hacer una consulta para obtener el scope de cada variable por separado. Que seran unas 40. Eso sería óptimo?

(acabo de probar hacer la consulta aparte, y funciona.)

Última edición por mayid; 07/05/2010 a las 19:46

Etiquetas: insert, tablas
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 07:45.