我目前正在编写一种游戏,我需要将PHP部分简化为MysqL.
现在更新列我这样做(在PHP中):
$res = $db->query("
SELECT succeeded
, Failed
, prison
FROM users_crime_masteries
WHERE uid = $uid
AND cid = $crimeid
");
if($status == 'succeeded') {
if(!$res->num_rows) {
$db->query("INSERT INTO users_crime_masteries (uid, cid, succeeded) VALUES($uid, $crimeid, 1)");
return 1;
}
else {
$row = $res->fetch_object();
$db->query("UPDATE users_crime_masteries SET succeeded = succeeded + 1 WHERE uid = $uid AND cid = $crimeid");
return $row->succeeded += 1;
}
}
^这是功能的一半,但你明白了.
我基本上只想在MysqL中实现的是,如果没有行,则插入带有cid和uid的新行 – 如果存在行,则使用1更新成功.
我一直在浏览stackoverflow,我基本上理解的是我必须使用INSERT … ON DUPLICATE KEY UPDATE查询.
但我发现了这个评论:MySql Table Insert if not exist otherwise update
我有一个名为id的列,它是自动增量和主键.我的问题是,这会导致任何问题吗?
我目前的MysqL版本是:5.7.24
另外,对于这个ON DUPLICATE KEY UPDATE,我是否必须将uid和cid列作为密钥?
更多信息:
将查询更改为:
switch($status) {
case 'succeeded' :
$db->query("INSERT INTO users_crime_masteries (uid, cid, succeeded) VALUES($userid, $crimeid, 1) ON DUPLICATE KEY UPDATE succeeded = succeeded + 1");
break;
case 'Failed' :
$db->query("INSERT INTO users_crime_masteries (uid, cid, Failed) VALUES($userid, $crimeid, 1) ON DUPLICATE KEY UPDATE Failed = Failed + 1");
break;
case 'prison' :
$db->query("INSERT INTO users_crime_masteries (uid, cid, Failed, prison) VALUES($userid, $crimeid, 1, 1) ON DUPLICATE KEY update Failed = Failed + 1, prison = prison + 1");
break;
}
运行以下MySQL查询:
ALTER TABLE `users_crime_masteries`
ADD UNIQUE KEY `uid` (`uid`),
ADD UNIQUE KEY `cid` (`cid`),
用一个不同的cid进行了一些犯罪,通过PHPmyadmin检查但是只有一行,更新了成功的字段.
我错过了什么吗?
解决方法:
如果您向表中添加唯一键(uid,cid),那么ON DUPLICATE KEY UPDATE应该可以正常工作.您的id列不会受到影响或导致问题.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。