我有一個表rating
與這些字段rate_id, game_id, rating, ip
。讓我們假設這些字段具有以下值1,130,5,155.77.66.55
如果存在某些值,則mysql更新,否則創建一個新條目
當用戶試圖把票投給一個遊戲,我想用MySQL來檢查他是否已經投票支持這個遊戲,所以MySQL將檢查是否ip
和game_id
已經存在,如果他們存在然後MySQL將更新rating
的值,否則將創建一個新的條目。
什麼是有效的方法來做到這一點?
我有一個表rating
與這些字段rate_id, game_id, rating, ip
。讓我們假設這些字段具有以下值1,130,5,155.77.66.55
如果存在某些值,則mysql更新,否則創建一個新條目
當用戶試圖把票投給一個遊戲,我想用MySQL來檢查他是否已經投票支持這個遊戲,所以MySQL將檢查是否ip
和game_id
已經存在,如果他們存在然後MySQL將更新rating
的值,否則將創建一個新的條目。
什麼是有效的方法來做到這一點?
創建涵蓋ip + game_id
的唯一索引。之後,您可以使用INSERT ... ON DUPLICATE KEY UPDATE聲明。
所以總的查詢將會像
INSERT INTO rating (rate_id, game_id, rating, ip) VALUES (1,130,5,'155.77.66.55')
ON DUPLICATE KEY UPDATE rating = 5
MySQL允許一對插入重複密鑰更新的語法。所以,如果你設置你的密鑰被game_id,USER_ID(或任何方式,您識別用戶),那麼你可以使用INSERT ...上的重複密鑰更新,這將做到這一點:
// check to see if exist
$sql = "SELECT ip FROM rating WHERE ip=$ip && game_id={$game_id}";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
if(isset($row['ip'])){
mysql_query("UPDATE HERE");
}else{
mysql_query("INSERT HERE");
}
你也可以看看REPLACE INTO。也許不是這個項目,但以供將來參考:
更換作品酷似INSERT, 不同之處在於,如果一個老行的表 具有相同的值作爲一個 主鍵的新行或唯一索引,老 行被刪除之前的新行是從 插入
謝謝你,偉大工程:) – Sotiris 2011-04-22 12:54:57
@Sotiris:這就是爲什麼我在這裏;-) – zerkms 2011-04-22 12:57:22