2009-09-16 78 views
1

我有一個加/減系統,用戶可以在博客文章中添加一個或減去一個。更新表中REPLACE INTO時間戳

我的數據庫(MySQL的)表看起來像這樣: 用戶ID 條目號 投票 - 這是+1或-1 的timeStamp

我已經設置了時間戳默認CURRENT_TIMESTAMP。

我必須加上方法plus()和minus()。兩者都做同樣的事情,但一個插入到'投票',另一個插入-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對不起的標題感到抱歉。想不到一個合適的。

回答

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

你不需要引用timestamp列,因爲在所有的時間戳只有在行被實際更新時才更新。如果投票結果相同,則沒有更改,並且時間戳列未更新。 – longneck 2009-09-16 21:19:24