Autor Tema: Actualización de una tabla según datos de la misma tabla  (Leído 4334 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Jeronimo

  • Gigabyte
  • ****
  • Mensajes: 402
  • Reputación: +33/-2
    • Ver Perfil
Actualización de una tabla según datos de la misma tabla
« en: Enero 23, 2013, 12:36:10 pm »
Hola.
Tengo la tabla "posicionesmesas" (es un proyecto de restaurante) con los campos "mesa", "x", "y" y "tipo".
En el campo "mesa" guardo el número de la mesa; en los campos "x" e "y" guardo las coordenadas de las mesas (en realidad, de los botones que las representan) y en "tipo" guardo "p" si es el valor predeterminado o "a" si es la posición actual.
Entonces, en la tabla puedo tener lo siguiente:

mesa          x             y              tipo
1               210          210           p
2               540          210           p
3               800          210           p
4               210          500           p
5               540          790           p
6               800          1020         p
1               210          210           a
2               360          210           a
3               800          210           a
4               210          500           a
5               540          790           a
6               800          1020         a

En este ejemplo tengo seis mesas dispuestas en tres columnas y tres filas. Los registros cuyo campo "tipo" tienen valor "p" son los que utilizo para que, luego de haber modificado la posición actual de las mesas (valor "a"), se puedan volver a poner en la posición predeterminada.
Ahora bien, lo que necesito es saber si hay forma de hacer el cambio en una sola consulta SQL (trabajo con MySQL).
Podría hacer lo siguiente:
Código: [Seleccionar]
Tabla.Open "SELECT mesa, x, y FROM posicionesmesas WHERE tipo = 'p'"
For i = 1 to 6
    base.Execute "UPDATE posicionesmesas SET x = " & Tabla!x & ", y = " & Tabla!y & " WHERE mesa = " & Tabla!mesa & " AND tipo = 'a'"
    Tabla.MoveNext
Next i
Pero no me gusta. Estoy seguro que debe haber una forma de hacer eso en una sola consulta. Probé poniendo lo siguiente pero no funcionó.
Código: [Seleccionar]
base.Execute "UPDATE posicionesmesas pm SET x = (SELECT x FROM posicionesmesas pm2 WHERE pm2.mesa = pm.mesa AND pm2.tipo = 'p') WHERE tipo = 'a'"¿Saben si se puede hacer lo que quiero?
Muchas gracias.

Jerónimo
« última modificación: Enero 23, 2013, 12:38:04 pm por Jeronimo »

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Actualización de una tabla según datos de la misma tabla
« Respuesta #1 en: Enero 23, 2013, 04:37:46 pm »
Amigo, ¿lo que quieres es restaurar valores predeterminados? o sea, los valores de X e Y del tipo P se reemplacen en los del tipo A ¿es asi?
Podrías tener otra tabla (TablaP) con los valores X e Y, borras la tabla posicionesmesas e insertas todos los valores de la TablaP
Podrías tener dos campos mas "xp" e "yp" para copiar de esos campos a los campos "x" e' "y".

No se, quiza otro amigo te capte mejor, pero por el momento eso es lo que te entendi, espero haberte ayudado.

Saludos
Me encuentras en YAcosta.com

Jeronimo

  • Gigabyte
  • ****
  • Mensajes: 402
  • Reputación: +33/-2
    • Ver Perfil
Re:Actualización de una tabla según datos de la misma tabla
« Respuesta #2 en: Enero 23, 2013, 08:12:39 pm »
¡Excelente, Yván!
No había pensado en lo de "xp" e "yp". Es una gran solución.
Igualmente, me quedo con la espina por saber hacer el otro procedimiento de una sola tirada.
Muchas gracias.
Saludos.

ssccaann43

  • Moderador
  • Terabyte
  • *****
  • Mensajes: 970
  • Reputación: +97/-58
    • Ver Perfil
    • Sistemas Nuñez, Consultores y Soporte, C.A.
Re:Actualización de una tabla según datos de la misma tabla
« Respuesta #3 en: Enero 29, 2013, 02:42:40 pm »
Esto no funciona??? Verifica nuevamente y avisame...

Código: [Seleccionar]
base.Execute "UPDATE posicionesmesas AS pm SET pm.x =
(SELECT pm2.x FROM posicionesmesas AS pm2 WHERE pm2.mesa = pm.mesa AND pm2.tipo = 'p') WHERE pm.tipo = 'a'"

Pero sino funciona, yo simplemente lo haría así...!

Código: [Seleccionar]
base.Execute "DELETE FROM posicionesmesas WHERE tipo = 'a'"
base.Execute "INSERT INTO posicionesmesas VALUES(MESA,X,Y,TIPO) SELECT MESA,X,Y,'A' AS TIPO FROM posicionesmesas WHERE tipo = 'P'"

Y ya... Me elimina las posiciones de las mesas, y luego le inserto las que tenía guardada...

Saludos  ;D
Miguel Núñez.