正确的语法来更新mysql最高id

时间:2015-08-08 23:06:58

标签: mysql

这就是我为特定用户名选择最高ID的方式

SELECT * FROM  messages WHERE user='me' ORDER BY id DESC LIMIT 0, 1

我的列名为“send”,用户名为me

现在我想像这样更新它:

UPDATE   messages SET `send`='ok' WHERE user='me' ORDER BY id DESC LIMIT 0, 1

我收到语法错误

1064 - 您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在第1行

附近的“1”附近使用正确的语法

2 个答案:

答案 0 :(得分:0)

limit中的update仅允许行计数,而不是偏移量:

UPDATE messages
    SET `send`='ok'
    WHERE user='me'
    ORDER BY id DESC
    LIMIT 1;

答案 1 :(得分:0)

我觉得你在这里为自己做好准备。

如果您要在更新前选择最高ID,则:

SELECT max(id) FROM  messages WHERE user='me'

您的UPDATE应该使用刚才检索的相同ID作为WHERE子句。否则,您可以使用“ok”更新错误的行。完整代码,正如我所做的那样:

// Get ID to update
$idToUpdate_q = $pdoConn->prepare("SELECT max(messages.id) FROM  messages WHERE user = :user");
$idToUpdate_q->bindValue(':user','me');
$idToUpdate_q->execute();
$idToUpdate = $idToUpdate_q->fetchColumn();

// Update Row
$updateRow_sql = $pdoConn->prepare("UPDATE messages
SET
messages.send = :send
WHERE
messages.id = :idToUpdate");

$updateRow_sql->execute(array(
':send' =>'ok',
':idToUpdate' =>$idToUpdate));