Die Lösung besteht darin, ORDER BY und LIMIT als Teil eines Joins in einer FROM-Klausel zu verschachteln. Auf diese Weise können Sie zuerst die genaue Zeile finden, die aktualisiert werden soll (ta.id), und dann die Aktualisierung ausführen.
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';
Hut ab vor Baron Schwartz, a.k.a. Xaprb, für den exzellenten Beitrag zu genau diesem Thema:http://www.xaprb.com/blog/2006/08/10/how-to-use- order-by-and-limit-on-multi-table-updates-in-mysql/