我有一个表格rating
,其中包含rate_id, game_id, rating, ip
这些字段。假设这些字段具有以下值1,130,5,155.77.66.55
当用户尝试为游戏投票时,我想用mysql检查他是否已经投票支持这个游戏,所以mysql会检查ip
和game_id
是否已经存在,如果它们存在则mysql将更新rating
的值,否则将创建一个新条目。
有效的方法是什么?
答案 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 ...这样做:
答案 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索引,旧的 在新行之前删除行 插入