在php中获得独特的命中数

Joh*_*ohn 4 php mysql database counter

我想使用PHP为我的网站添加一个独特的点击计数器.此计数器将为数据库中的每个页面保存访问者的IP.我有这样的数据库结构:

hits有两列:

ip
page_url
Run Code Online (Sandbox Code Playgroud)

我的问题是:在PHP文件中获取访问者的IP后,哪个更好(性能)?

  1. 检查IP地址是否已存在于数据库中.当尚未在数据库中添加它时
  2. 只需添加所有访问者IP(无需重复检查),然后获取相关页面的不同IP以获得唯一的命中数?

Eug*_*eck 6

如果您使用的是MySQL,则可能需要滥用PRIMARY KEY和ON DUPLICATE KEY UPDATE的组合:

CREATE TABLE hits (
ip VARCHAR(15),
page_url VARCHAR(200),
PRIMARY KEY (ip,page_url),
hitcount INT NOT NULL DEFAULT 0
)
Run Code Online (Sandbox Code Playgroud)

现在在页面上点击你做

INSERT INTO hits(ip, page_url,hitcount) VALUES('$ip','$url',1)
ON DUPLICATE KEY UPDATE hitcount=hitcount+1
Run Code Online (Sandbox Code Playgroud)

为什么这个?

  • 另一个唯一的关键是POISON用于写入繁重的表,因此请避免使用它.真.
  • INSERT ... ON DUPLICATE KEY UPDATE仅锁定行一次

您可能还想记录上次访问的时间戳:

ALTER TABLE hits ADD COLUMN lastseen TIMESTAMP();
Run Code Online (Sandbox Code Playgroud)