2

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

当用户尝试为游戏投票时,我想用 mysql 检查他是否已经为该游戏投票,因此 mysql 将检查是否ip并且game_id已经存在,如果它们存在,则 mysql 将更新 的值,rating否则将创建一个新条目。

什么是有效的方法来做到这一点?

4

4 回答 4

8

创建涵盖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
于 2011-04-22T12:39:28.757 回答
3

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

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

于 2011-04-22T12:40:21.097 回答
0

你也可以看看 REPLACE INTO。也许不是为了这个项目,而是为了将来参考:

REPLACE 的工作方式与 INSERT 完全相同,只是如果表中的旧行与 PRIMARY KEY 或 UNIQUE 索引的新行具有相同的值,则在插入新行之前删除旧行

来自:dev.mysql.com

于 2011-04-22T14:22:21.750 回答
-1
// 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");
}
于 2011-04-22T12:41:48.287 回答