PHP/SQL-乘法主键(重复时更新)
我的数据库中有以下表格:PHP/SQL-乘法主键(重复时更新),php,mysql,sql,Php,Mysql,Sql,我的数据库中有以下表格: CREATE TABLE IF NOT EXISTS `grid_users` ( `userid` int(11) NOT NULL, `times_played` int(4) NOT NULL DEFAULT '0', `won_total` varchar(50) NOT NULL DEFAULT '0', `won_1` varchar(50) NOT NULL DEFAULT '0' COMMENT 'Did user win prize 1
CREATE TABLE IF NOT EXISTS `grid_users` (
`userid` int(11) NOT NULL,
`times_played` int(4) NOT NULL DEFAULT '0',
`won_total` varchar(50) NOT NULL DEFAULT '0',
`won_1` varchar(50) NOT NULL DEFAULT '0' COMMENT 'Did user win prize 1? If yes, show badge',
`won_1_time` int(22) NOT NULL,
`won_2` int(1) NOT NULL DEFAULT '0',
`won_2_time` int(22) NOT NULL,
`won_3` int(1) NOT NULL,
`won_3_time` int(22) NOT NULL,
`last_update` int(22) NOT NULL,
`type` int(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`userid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
如您所见,userid被设置为主键
尽管我希望PHP检查其中两列是否存在,如果存在->更新:
if($type == "1"){
$stmt = $dbh->prepare("INSERT INTO grid_users (type)
VALUES ('1') ON DUPLICATE KEY UPDATE won_total=won_total+'1';");
}elseif($type == "2"){
$stmt = $dbh->prepare("INSERT INTO grid_users (type)
VALUES ('2') ON DUPLICATE KEY UPDATE won_total=won_total+'1';");
}
try {
$stmt->execute();
}
catch(PDOException $e) {
die($e->getMessage());
}
尽管现在,由于它只检查一个主键的Userid,它只会更新数据库中的第一条记录,而不管$type设置为什么。但是,我不明白为什么要为此使用insert。为什么不干脆做:
update grid_users
set won_total = won_total + 1
where type = 1;
唯一键`userid`,`type`UPDATE grid`用户设置唯一键userid,type无效..否,必须在表创建->创建表时使用唯一键,如果不存在`grid\u users`…您的列…,主键`userid`,唯一键`userid`,`type`。。。或者使用ALTER TABLE`grid\U users`ADD UNIQUE KEY`userid`,`type`,尽管它仅在您还指定了另一列时才起作用,以便它知道是否存在重复->INSERT INTO grid\U users userid,type VALUES。。。在重复密钥更新时…因为每个新用户都有一个新条目userid@oliverbj . . . 您没有将userid传递给insert,因此它将被设置为NULL,并且insert将失败。