如果存在某些值,则mysql更新,否则创建新条目

时间:2011-04-22 12:37:40

标签: php mysql rating-system

我有一个表格rating,其中包含rate_id, game_id, rating, ip这些字段。假设这些字段具有以下值1,130,5,155.77.66.55

当用户尝试为游戏投票时,我想用mysql检查他是否已经投票支持这个游戏,所以mysql会检查ipgame_id是否已经存在,如果它们存在则mysql将更新rating的值,否则将创建一个新条目。

有效的方法是什么?

4 个答案:

答案 0 :(得分:7)

创建涵盖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

答案 1 :(得分:3)

MySQL允许INSERT的重复密钥更新语法。因此,如果您将密钥设置为game_id,user_id(或您识别用户的任何方式),那么您可以在DUPLICATE KEY UPDATE上使用INSERT ...这样做:

http://dev.mysql.com/doc/refman/5.5/en/insert.html

答案 2 :(得分:0)

// 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");
}

答案 3 :(得分:0)

您还可以查看REPLACE INTO。也许不适用于这个项目,但供将来参考:

  

REPLACE与INSERT完全一样,   除非表中有一个旧行   与a的新行具有相同的值   PRIMARY KEY或UNIQUE索引,旧的   在新行之前删除行   插入

来自:dev.mysql.com