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

Php 如果存在某些值,则更新mysql,否则创建一个新条目,php,mysql,rating-system,Php,Mysql,Rating System,我有一个表rating,其中包含rate\u id、game\u id、rating、ip。假设这些字段具有以下值1130,5155.77.66.55 当一个用户尝试为一个游戏投票时,我想用mysql检查他是否已经为这个游戏投票,这样mysql将检查ip和game\u id是否已经存在,如果它们存在,mysql将更新评级的值,否则将创建一个新条目 什么是有效的方法?创建包含ip+游戏id的唯一索引。之后,您可以使用语句 因此,整个查询将类似于 INSERT INTO rating (rate_i

我有一个表
rating
,其中包含
rate\u id、game\u id、rating、ip
。假设这些字段具有以下值
1130,5155.77.66.55

当一个用户尝试为一个游戏投票时,我想用mysql检查他是否已经为这个游戏投票,这样mysql将检查
ip
game\u id
是否已经存在,如果它们存在,mysql将更新
评级
的值,否则将创建一个新条目


什么是有效的方法?

创建包含
ip+游戏id
的唯一索引。之后,您可以使用语句

因此,整个查询将类似于

INSERT INTO rating (rate_id, game_id, rating, ip) VALUES (1,130,5,'155.77.66.55')
ON DUPLICATE KEY UPDATE rating = 5

MySQL允许对INSERT使用重复密钥更新语法。因此,如果您将密钥设置为game_id、user_id(或您识别用户的任何方式),那么您可以使用INSERT…on DUPLICATE key UPDATE,这将实现以下功能:


您还可以查看“替换到”。可能不适用于本项目,但供将来参考:

“替换”的工作原理与“插入”完全相同, 除了如果表中有一个旧的行 具有与的新行相同的值 主键或唯一索引,旧 在删除新行之前删除行 插入


from:

如果同时有两个请求,该怎么办?不要像那样对数据库发送垃圾邮件,检查@zerkms解决方案,这是更新数据的标准方法
// 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");
}