首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >插入重复键更新IF语句

插入重复键更新IF语句
EN

Stack Overflow用户
提问于 2017-05-01 23:45:33
回答 1查看 367关注 0票数 0

我正试图创建一个脚本,用于统计访问我的网站的访问者。为此,我记录访问者的IP,以及当天的日期和经过的次数。如果这是第一次访问,数据库中的所有记录。但我想数一天每人一张通行证。

如果IP已经存在,并且日期与日期不同:我们将指定一天的日期,并增加传递的次数(+1)。

问题: --当日期与日期不同时,它被更改,但是:即使IP已经被计算,传递的次数也会继续增加。

只有在第二天,当日期改变的时候.

这里是我的表结构:

代码语言:javascript
复制
--
-- 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;

这里是代码:

代码语言:javascript
复制
$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重复键”.

提前谢谢你!

EN

回答 1

Stack Overflow用户

发布于 2017-05-01 23:56:29

您的问题是重复的密钥只是在IP地址上,但是您的表在每个IP地址/日期组合中确实是唯一的。因此,随后几天的访问覆盖了前一天的行。

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

如果您修复了这个问题,则不需要条件(当前日期也不需要PHP ),您只需将它作为SQL:

代码语言:javascript
复制
INSERT INTO `ChartsGuests` (`IP_Guest` , `Date`, `Total`)
 VALUES ('".$IP_NewGuest."' , CURDATE(), 1)  
ON DUPLICATE KEY UPDATE Total =  Total + 1 )";
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43728037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档