使用REPLACE INTO更新表中的时间戳

irl*_*irl 1 mysql sql timestamp

我有一个加/减系统,用户可以在博客文章中添加一个或减一个.

我的数据库(MySQL)表如下所示:userid entry id vote - 这是+1或-1 timeStamp

我已将timeStamp设置为默认为CURRENT_TIMESTAMP.

我必须使用方法plus()和minus().两者都做同样的事情但是一个在'投票'中插入+1而另一个插入-1.由于(userid,entryid)是主键,我使用REPLACE INTO.INSERT INTO会出现重复错误.INSERT IGNORE不允许用户将投票从+1更改为-1

"REPLACE INTO votes(userid, entryid, vote) VALUES(:uid,:eid, -1)";
Run Code Online (Sandbox Code Playgroud)

忽略值..

虽然REPLACE INTO工作正常,但我按时间戳排序,所以当有人在投票后第二次点击+1时,它会更新时间戳,这会将其带到列表的顶部.

有人知道解决方案吗?

ps对不起的标题抱歉.想不出一个合适的人.

gah*_*ooa 5

使用INSERT ... ON DUPLICATE KEY UPDATE MySQL的语法,您可以执行内联检查,并且仅在投票实际更改时更新时间戳:

INSERT INTO 
  votes 
SET 
  userid = :uid, 
  entryid = :eid, 
  vote = :vote,
  timeStamp = NOW()  /* I'm being explicit here -- you don't need this */
ON DUPLICATE KEY UPDATE 
  vote = :vote, 
  timeStamp = IF(vote = :vote, timeStamp, NOW())
Run Code Online (Sandbox Code Playgroud)