La soluzione è annidare ORDER BY e LIMIT in una clausola FROM come parte di un join. Questo ti consente di trovare prima la riga esatta da aggiornare (ta.id), quindi eseguire il commit dell'aggiornamento.
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';
Consiglio al barone Schwartz, alias Xaprb, per l'eccellente post su questo argomento esatto:http://www.xaprb.com/blog/2006/08/10/how-to-use- order-by-and-limit-on-multi-table-updates-in-mysql/