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

时间:2009-09-16 19:00:54

标签: sql mysql timestamp

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

我的数据库(MySQL)表如下所示: 用户身份 条目号 投票 - 这是+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)";

忽略值..

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

任何人都知道解决方案吗?

抱歉对不好的头衔。想不出合适的人。

1 个答案:

答案 0 :(得分:5)

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

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())