Estoy tratando de actualizar el registro más reciente, donde el nombre es John
(John
tiene varios registros pero ID diferente), pero parece que estoy en un aprieto. Lo que está mal con mi consulta?
UPDATE messages_tbl SET is_unread=1
WHERE ReceiveTime = (SELECT MAX(ReceiveTime) FROM messages_tbl WHERE name='John')
Hay una manera mejor de hacer algo como esto?
Usted puede unirse a ambos y realizar la actualización basado en la condición.
Sin la
WHERE
condición. Todo va a actualizar el la columnais_unread
para la entrada más reciente.Error Code : 1064
.¿cuál es el mensaje de error completo?
Query : update messages s1 set is_unread=1 inner join (SELECT Name, MAX(ReceiveTime) max_time FROM messages group by Messa... Error Code : 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'inner join (SELECT Name, MAX(ReceiveTime) max_time FROM messages group' at line 2
sí, lo siento. probar mi uno actualizado.
Genial! ¿Te importaría explicar por qué el otro no funcionan? Yo sin comentar el
WHERE
así que puedo objetivo específico de filas y todavía funcionaba. 🙂OriginalEl autor John Woo
Usted podría tratar de usar
y
LIMIT
.Intente esto:
Esta consulta se actualizan las filas en orden de la más alta (más reciente)
ReceiveTime
hasta el más bajo (el más antiguo)ReceiveTime
. Se utiliza en conjunción conLIMIT
, sólo el más recienteReceiveTime
será alterado.No es un problema, sólo quería asegurarme de que mi respuesta fue todavía relevante a tu pregunta :).
OriginalEl autor Aiias