Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP MYSQL插入/更新_Php_Mysql - Fatal编程技术网

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
),KEY
date
date
)工作非常完美。我很接近,但谢谢。此解决方案存在潜在的竞争条件。然后使用上面更好的解决方案:p没有考虑到这一点。打得好;)