Mysql
 sql >> Base de données >  >> RDS >> Mysql

Syntaxe UPDATE avec ORDER BY, LIMIT et plusieurs tables

La solution consiste à imbriquer ORDER BY et LIMIT dans une clause FROM dans le cadre d'une jointure. Cela vous permet de trouver d'abord la ligne exacte à mettre à jour (ta.id), puis de valider la mise à jour.

UPDATE tableA AS target
    INNER JOIN (
      SELECT ta.id
      FROM tableA AS ta
        INNER JOIN tableB AS tb ON tb.id = ta.user_id
        WHERE tb.username = '$varName'
        ORDER BY ta.datetime DESC
        LIMIT 1) AS source ON source.id = target.id
    SET col1 = '$var';

Chapeau au baron Schwartz, alias Xaprb, pour l'excellent article sur ce sujet précis :http://www.xaprb.com/blog/2006/08/10/how-to-use- order-by-and-limit-on-multi-table-updates-in-mysql/