daily_product_stats
. 它应该只计算每个产品每个会话的视图一次。因此,要想知道今天435产品被浏览了多少次,我们可以很容易地做到这一点,也可以很容易地看到今天哪个产品被浏览得最多。
但我开始注意到奇怪的结果,比如产品2324在上午9点之前被最多看了36次。我怀疑有些东西不对,因为那不是一个很受欢迎的产品。
所以我决定用一个ip来跟踪每个视图,以确保每个视图都是唯一的。所以每次我更新
我要在
product_ip_tracking
有了IP。
首先,这是执行跟踪的页面上的代码:
include_once("php/packages/pdomanager/PDOManager.php");
$pdo = PDOManager::getConnection();
$product_stat_qry = '
INSERT INTO daily_product_stats
SET product_stat = 1, product_id = :pid, first_entry = :date
ON DUPLICATE KEY UPDATE product_stat = product_stat+1
';
// Update temp stat table
$product_ip_tracking_qry = '
INSERT INTO product_ip_tracking
SET product_id = :pid, date = :date, user_ip = :ip
';
$stat_data = array(
"pid" => $_GET['pid'],
"date" => date('Ymd')
);
$track_data = $stat_data;
$track_data["ip"] = $_SERVER['REMOTE_ADDR'];
$stat_sth = $pdo->prepare($product_stat_qry);
$track_sth = $pdo->prepare($product_ip_tracking_qry);
if(!isset($_SESSION['daily_product_stats'][$_GET['pid']]))
{ // only update once per person per session
$stat_sth->execute($stat_data);
$track_sth->execute($track_data);
$_SESSION['daily_product_stats'][$_GET['pid']] = 1;
}
查看一起执行的两个不同的查询,您应该能够假设无论product_stat是针对daily_product_stats表上的product_id,product_ip_tracking表上的相同product_id都应该有许多行。
所以我让它运行几分钟,然后在数据库上运行这个查询:
SELECT product_id, COUNT( user_ip ) AS times, user_ip, DATE
FROM `product_ip_tracking`
GROUP BY user_ip
ORDER BY times DESC , product_id
我发现今天在同一个IP地址上查看了84次产品
66.249.65.123
. 我认为我的代码应该防止同一IP每天被跟踪一次以上。我做了一些关于IP的研究,看起来它很可能是一个谷歌机器人,所以我想也许会话不能设置机器人,所以这就是为什么它被跟踪多次。。。
所以我想调查一下
产品编号8151及其产品编号84的表格。不是,只有两个。我觉得这很奇怪,因为我不明白这是怎么可能的。我一点也不知道这里发生了什么。
有人有什么想法吗?