我有一个rating
包含这些字段的表rate_id, game_id, rating, ip
。假设这些字段具有以下值1,130,5,155.77.66.55
当用户尝试为游戏投票时,我想用 mysql 检查他是否已经为该游戏投票,因此 mysql 将检查是否ip
并且game_id
已经存在,如果它们存在,则 mysql 将更新 的值,rating
否则将创建一个新条目。
什么是有效的方法来做到这一点?
我有一个rating
包含这些字段的表rate_id, game_id, rating, ip
。假设这些字段具有以下值1,130,5,155.77.66.55
当用户尝试为游戏投票时,我想用 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 允许对 INSERT 使用重复键更新语法。因此,如果您将密钥设置为 game_id、user_id(或您识别用户的任何方式),那么您可以在 DUPLICATE KEY UPDATE 上使用 INSERT...
你也可以看看 REPLACE INTO。也许不是为了这个项目,而是为了将来参考:
REPLACE 的工作方式与 INSERT 完全相同,只是如果表中的旧行与 PRIMARY KEY 或 UNIQUE 索引的新行具有相同的值,则在插入新行之前删除旧行
// 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");
}