使用 REPLACE INTO 更新表中的时间戳
Posted
技术标签:
【中文标题】使用 REPLACE INTO 更新表中的时间戳【英文标题】:Timestamp updating in table with REPLACE INTO 【发布时间】:2009-09-16 19:00:53 【问题描述】:我有一个加/减系统,用户可以在博客文章之外加一或减一。
我的数据库 (mysql) 表如下所示: 用户身份 条目编号 投票 - +1 或 -1 时间戳
我已将时间戳设置为默认值 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 时,它会更新时间戳,从而将其置于列表顶部。
有人知道解决办法吗?
ps 抱歉标题不好。想不出合适的。
【问题讨论】:
【参考方案1】:使用 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())
【讨论】:
您根本不需要引用时间戳列,因为只有在实际更新行时才会更新时间戳。如果投票相同,则没有变化,时间戳列不更新。以上是关于使用 REPLACE INTO 更新表中的时间戳的主要内容,如果未能解决你的问题,请参考以下文章
MySQL的replace into 与insert into on duplicate key update
MySQL的replace into 与insert into on duplicate key update