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?

OriginalEl autor enchance | 2013-03-30

2 Comentarios

  1. 7

    Usted puede unirse a ambos y realizar la actualización basado en la condición.

    UPDATE  messages a
            INNER JOIN
            (
                SELECT  name , MAX(ReceiveTime) max_time
                FROM    messages 
                GROUP   BY name 
            ) b ON  a.name = b.name AND
                    a.ReceiveTime = b.max_time
    SET     a.is_unread = 1
    -- WHERE    a.name = 'John'

    Sin la WHERE condición. Todo va a actualizar el la columna is_unread para la entrada más reciente.

    Lo siento, me estoy poniendo un 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

  2. 35

    Usted podría tratar de usar y LIMIT.

    Intente esto:

    UPDATE messages_tbl SET is_unread = 1
    WHERE name = 'John'
    ORDER BY ReceiveTime DESC
    LIMIT 1

    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 con LIMIT, sólo el más reciente ReceiveTime será alterado.

    Lo siento, he actualizado mi explicación. No es su culpa.
    No es un problema, sólo quería asegurarme de que mi respuesta fue todavía relevante a tu pregunta :).

    OriginalEl autor Aiias

Dejar respuesta

Please enter your comment!
Please enter your name here