我有一个加/减系统,用户可以在博客文章中添加一个或减一个。
我的数据库(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时,会更新时间戳,这会将其带到列表的顶部。
任何人都知道解决方案吗?
抱歉对不好的头衔。想不出合适的人。答案 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())