gpt4 book ai didi

php - INSERT ON DUPLICATE KEY UPDATE IF 语句

转载 作者:行者123 更新时间:2023-11-29 10:51:03 25 4
gpt4 key购买 nike

我正在尝试创建一个脚本来统计有关我网站的访问者的信息。为此,我记录了访问者的 IP、当天的日期和经过的次数。如果这是第一次访问,就数据库中的所有记录进行。但我想算每人每天一张通行证。

我想要做什么:如果IP已经存在,并且日期与当天不同:我们分配当天的日期,并增加通过的次数(+1) .

问题:当日期与当天不同时,它会改变,但是:即使当天的IP已经被统计,通过的数量仍然会继续增加。

它应该只在第二天完成,当日期改变时......

这是我的表格结构:

--
-- Table structure for table `ChartsGuests`
--

CREATE TABLE `ChartsGuests` (
`IP_Guest` varchar(39) NOT NULL,
`Date` varchar(10) NOT NULL,
`Total` int(11) NOT NULL,
PRIMARY KEY (`IP_Guest`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB DEFAULT CHARSET=utf8;

这是代码:

$IP_NewGuest = $_SERVER['REMOTE_ADDR'];

$Today = date('d/m/Y');


$SQL = "INSERT INTO `ChartsGuests` (`IP_Guest` , `Date`, `Total`) VALUES ('".$IP_NewGuest."' , '".$Today."', 1)
ON DUPLICATE KEY UPDATE
Date = IF(Date != '".$Today."', VALUES(Date), '".$Today."'),
Total = IF(Date != '$Today', VALUES(Total), Total + 1 )";



$REQ = $DB->prepare($SQL);
$REQ->execute() or die(var_dump($REQ->errorInfo()));

// echo $SQL;

它应该只在第二天,当日期改变时完成......我不知道问题来自哪里,这是我第一次使用带有“IF”的“ON DUPLICATE KEY”.. .

提前谢谢您!

最佳答案

您的问题是您的重复键仅位于 IP 地址上,但您的表对于每个 IP 地址/日期组合来说确实是唯一的。因此,后续几天的访问会覆盖前一天的行。

如果您将表的逻辑更改为在这两个字段上具有复合唯一键,则查询将为新的 (IP,Date) 组合生成插入,并为已见过的 (IP,date) 组合生成更新。

如果你解决了这个问题,你就不需要条件(也不需要当前日期的 PHP),你可以将其作为你的 SQL:


INSERT INTO `ChartsGuests` (`IP_Guest` , `Date`, `Total`)
VALUES ('".$IP_NewGuest."' , CURDATE(), 1)
ON DUPLICATE KEY UPDATE Total = Total + 1 )";

关于php - INSERT ON DUPLICATE KEY UPDATE IF 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43728037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com