使用ORDER BY,LIMIT和Multiple Tables更新语法

PHP*_*eer 6 mysql syntax sql-update

学习SQL,对不起,如果这是初级的.试图找出UPDATE以下伪代码的工作解决方案:

UPDATE tableA 
SET tableA.col1 = '$var'
WHERE tableA.user_id = tableB.id
AND tableB.username = '$varName'
ORDER BY tableA.datetime DESC LIMIT 1
Run Code Online (Sandbox Code Playgroud)

以上更类似于SELECT语法,但我基本上尝试更新tableA 的最新行中的单个列值,其中tableB.username中找到的用户名(由$ varName表示)链接到tableB.id中的ID号,作为tableA.user_id中的id存在.

希望这是有道理的.我猜是某种JOIN必要的,但子查询似乎很麻烦UPDATE.当UPDATE涉及多个表时,我理解ORDER BY并且LIMIT不受限制但是我需要这个功能.有没有解决的办法?

有点困惑,提前谢谢.

PHP*_*eer 15

解决方案是将ORDER BY和LIMIT嵌套在FROM子句中作为连接的一部分.这让你先找到要更新的确切行(ta.id),然后提交更新.

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';
Run Code Online (Sandbox Code Playgroud)

帽子提示给Baron Schwartz,又名Xaprb,关于这个话题的优秀帖子:http://www.xaprb.com/blog/2006/08/10/how-to-use-order-by-and-limit- 上的多表更新-在MySQL的/