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

发布于 2024-11-03 00:54:48 字数 304 浏览 7 评论 0原文

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

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

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

I have a table rating with these fields rate_id, game_id, rating, ip. Let suppose that these fields has the following values 1,130,5,155.77.66.55

When a user try to vote for a game, I want with mysql to check if he has already vote for this game so mysql will check if ip and game_id already exists, if they exists then mysql will update the value of rating otherwise will create a new entry.

What is a efficient way to do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

魂牵梦绕锁你心扉 2024-11-10 00:54:48

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

Create unique index that covers ip + game_id. After that you can use INSERT ... ON DUPLICATE KEY UPDATE statement.

So the total query will be something like

INSERT INTO rating (rate_id, game_id, rating, ip) VALUES (1,130,5,'155.77.66.55')
ON DUPLICATE KEY UPDATE rating = 5
梦巷 2024-11-10 00:54:48

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

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

MySQL allows an on duplicate key update syntax for INSERT. So if you set your key to be game_id, user_id (or whichever way you identify the user) then you can use INSERT...on DUPLICATE KEY UPDATE which will do just that:

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

夜深人未静 2024-11-10 00:54:48

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

REPLACE 的工作方式与 INSERT 完全相同,
除非表中存在旧行
与 a 的新行具有相同的值
PRIMARY KEY 或 UNIQUE 索引,旧的
行在新行之前被删除
插入

自: dev.mysql.com

You could also take a look at REPLACE INTO. Maybe not for this project but for future reference:

REPLACE works exactly like INSERT,
except that if an old row in the table
has the same value as a new row for a
PRIMARY KEY or a UNIQUE index, the old
row is deleted before the new row is
inserted

from: dev.mysql.com

那伤。 2024-11-10 00:54:48
// 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");
}
// 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");
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文