PHP MYSQL插入/更新
我有一个简单的表格如下PHP MYSQL插入/更新,php,mysql,Php,Mysql,我有一个简单的表格如下 CREATE TABLE `stats` ( `id` int(11) NOT NULL auto_increment, `zones` varchar(100) default NULL, `date` date default NULL, `hits` int(100) default NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;
CREATE TABLE `stats` (
`id` int(11) NOT NULL auto_increment,
`zones` varchar(100) default NULL,
`date` date default NULL,
`hits` int(100) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;
所以每天只需存储每个区域的简单点击计数器
但我只想增加当天的点击量
我尝试过MYSQL复制密钥更新,但这不起作用,因为我可能在不同的日期有许多区域,所以我无法使它们唯一或唯一
因此,我唯一能想到的方法是首先进行查询以查看是否存在日期,然后进行简单的if()插入/更新
这是一种更好的方式来完成这样的任务,因为每天可能有1000次点击
希望这有意义:-)
谢谢你的建议
$result = mysql_query("SELECT id FROM stats WHERE zone=$zone AND date=$today LIMIT 1");
if(mysql_num_rows($result)) {
$id = mysql_result($result,0);
mysql_query("UPDATE stats SET hits=hits+1 WHERE id=$id");
} else {
mysql_query("INSERT INTO stats (zone, date, hits) VALUES ($zone, $today, 1)");
}
诸如此类,如果我对你的理解正确。。。这完全没有经过测试。您可以确定变量是什么。在CREATE语句中将元组(区域、日期)
声明为唯一的。这将使插入。。。按预期重复更新工作时:
CREATE TABLE `stats` (
`id` int(11) NOT NULL auto_increment,
`zone` varchar(100) default NULL,
`date` date default NULL,
`hits` int(100) default NULL,
PRIMARY KEY (`id`),
UNIQUE (`zone`, `date`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;
INSERT INTO stats (zone, date, hits) values ('zone1', 'date1', 1) ON DUPLICATE KEY UPDATE hits = hits + 1;
我说过我试过使用重复的密钥更新,但它不起作用,因为区域和日期不能唯一。示例一个区域将有多天,即区域-日期-点击区域1-2009-05-11-100区域2-2009-05-11-55区域1-2009-05-10-120区域2-2009-05-10-88参见ig I hade一个统一日期或区域I将只有上述示例中的两条记录:-(唯一(区域、日期)确保区域和日期在一起是唯一的。只要日期不同,同一区域的多个条目是完全可以的。这同样适用于同一日期和不同区域的多个条目。但不能有两个条目具有相同的区域和日期。我认为这符合您的要求。请在测试中尝试数据库,看看它是否有效。我会再试一次。艾曼。我当然有你上面提到的,但我现在会再试一次。好的,我知道我有什么问题。我为每个唯一的字段有两个唯一的名称,即KEY
zone
(zone
),KEYdate
(date
)工作非常完美。我很接近,但谢谢。此解决方案存在潜在的竞争条件。然后使用上面更好的解决方案:p没有考虑到这一点。打得好;)