MySQL - como actulizar un registro de un id especifico solo tomando en cuenta solo l ultimo registro de este

 
Vista:
sin imagen de perfil

como actulizar un registro de un id especifico solo tomando en cuenta solo l ultimo registro de este

Publicado por Edgard (3 intervenciones) el 29/04/2015 17:39:03
actualmente estoy desarrollando un aplicacion en java que en una misma tabla me muestre los datos de salida y de entrada de los automoviles pertenecientes a una empresa.


el problema es cuando me toca registrar la entrada del vehiculo en la cual tengo que localizar el ultimo regristro correspondiente a la salida de ese vehiculo y actualizarlo con los datos de la entrada.

algo mas o menos asi:
"UPDATE tablaejemplo SET llegada=? kilometraje=? WHERE placa=? and uso=?"

siendo placa el criterio para agrupar los registros y uso como un bolean para indicar que ese es el registro para actualizar.
al final de esta secuensia uso pasaria a false y no seria tomado en cuenta para la proxima entrada.

pero no logro hacer que haga el update al registro solo dice error de sintaxis
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

como actulizar un registro de un id especifico solo tomando en cuenta solo l ultimo registro de este

Publicado por leonardo_josue (414 intervenciones) el 29/04/2015 18:13:26
Hola Edgard:

De entrada lo que tienes no es finalmente lo que estás tratando de ejecutar, por lo que te recomiendo que revises exactamente cuál es la sentencia que se forma y que se ejecuta... el problema puede ser por el contenido de los parámetros... y de entrada si tienes un problema se sintaxis, cuando actualizas más de un campo DEBES SEPARAR POR COMAS CADA UNO DE ESTOS:

1
UPDATE tabla SET campo = 1, campo = 2, campo = 3.... WHERE condición

Revisa si es esto, si continuas con error, como te comenté, postea exactamente la sentencia que estás tratando de ejecutar para ver donde está el problema.

Saludos
Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

como actulizar un registro de un id especifico solo tomando en cuenta solo l ultimo registro de este

Publicado por Edgard (3 intervenciones) el 30/04/2015 03:40:28
si lo se he modificado un poco el query con algunos ejemplo que vi pero ahora actualiza toda la tabla segun la placa, en lugar de solo el el ultimo registro..

UPDATE salen SET recor=?, entra=?, gas=?, guardpat=?, obser=?, usar=? WHERE plac=? and numsalen=(SELECT max(numsalen))
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

como actulizar un registro de un id especifico solo tomando en cuenta solo l ultimo registro de este

Publicado por leonardo_josue (414 intervenciones) el 30/04/2015 16:51:35
Hola de nuevo Edgard:

Continuas con un pequeño detalle en tu consulta:

Si quieres obtener el último registro de tu tabla, no lo haces así:

1
SELECT max(numsalen)

Sino que debes especificar la tabla de donde extraes los datos, es decir, debes hacer algo como esto:

1
SELECT max(numsalen) FROM salen;

Sin embargo, no puedes utilizar en un UPDATE la misma tabla que vas a actualizar para hacer una consulta, esto sería como cortar la rama del árbol en la que estás parado... Es decir, es algo como esto, supongamos que tenemos esta tabla:

1
2
3
4
5
6
7
8
9
10
mysql> SELECT * FROM tabla;
+------+-------------+
| id   | descripcion |
+------+-------------+
|    1 | uno         |
|    2 | dos         |
|    3 | tres        |
|    4 | quatro      |
+------+-------------+
4 rows in set (0.00 sec)

Ahora bien, supongamos que queremos actualizar el último registro para cambiar la palabra QUATRO por CUATRO... de la manera en que tú lo estás intentando sería así:

1
2
3
4
mysql> UPDATE tabla SET descripcion = 'cuatro'
    -> WHERE id = (SELECT MAX(id) FROM tabla);
 
ERROR 1093 (HY000): You can't specify target table 'tabla' for update in FROM clause

Este es el error que te comento, NO PUEDES UTILIZAR LA TABLA QUE VAS A ACTUALIZAR PARA HACER UNA CONSULTA.

Lo que tienes que hacer entonces es particionar la consulta, por un lado obtener el MAX_ID que quieres actualizar y almacenarlo en una variable y después utilizar esta variable en el UPDATE, es decir, algo como esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
mysql> SET @max_id = (SELECT MAX(id) FROM tabla);
Query OK, 0 rows affected (0.00 sec)
 
mysql> SELECT @max_id;
+---------+
| @max_id |
+---------+
|       4 |
+---------+
1 row in set (0.00 sec)
 
mysql> UPDATE tabla SET descripcion = 'cuatro' WHERE id = @max_id;
Query OK, 1 row affected (0.09 sec)
Rows matched: 1  Changed: 1  Warnings: 0
 
mysql> SELECT * FROM tabla;
+------+-------------+
| id   | descripcion |
+------+-------------+
|    1 | uno         |
|    2 | dos         |
|    3 | tres        |
|    4 | cuatro      |
+------+-------------+
4 rows in set (0.00 sec)

Dale un vistazo para ver si es lo que necesitas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

como actulizar un registro de un id especifico solo tomando en cuenta solo l ultimo registro de este

Publicado por Edgard (3 intervenciones) el 30/04/2015 17:07:02
ya lo solucione, funciona correctamente, con ORDER BY para agrupar y el DESC LIMIT 1 para limitar a la actulizacion

UPDATE salen SET recor=?, entra=?, gas=?, guardpat=?, obser=?, usar=? WHERE plac=? and ORDER BY numsalen DESC LIMIT 1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar