我对它进行了设置,这样每次查看产品时,都会更新数据库表daily_product_stats中的一个值。它应该在每个产品的每个会话中只计算一次您的视图。因此,要查看产品435今天的浏览量,我们可以很容易地做到这一点,并很容易地看到哪个产品今天被观看的次数最多。
但我开始注意到奇怪的结果,比如产品2324在上午9点前被浏览了36次我怀疑有什么不对劲,因为这不是一个很受欢迎的产品。
所以我决定用一个ip来跟踪每个单独的视图,以确保每个视图都是唯一的。因此,每次我更新daily_product_stats时,我都会在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;
}看一下一起执行的两个不同的查询,您应该能够假设,无论daily_product_stats表上的product_stat是什么,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我发现product_id 8151在同一个IP地址66.249.65.123上被浏览了84次。我认为我的代码应该防止同一个IP每天被跟踪不止一次。我对这个IP做了一些研究,它看起来很像是一个谷歌机器人,所以我想也许会话不能用机器人设置,所以这就是为什么它被多次跟踪的原因……
因此,我希望查看product_id 8151的daily_product_stats表,并将其product_stat设置为84。我觉得这很奇怪,因为我不认为这是可能的。我完全不确定这里发生了什么。
有谁有什么想法吗?
发布于 2010-11-05 01:47:57
您的select查询看起来有点怪异,所以这可能解释了怪异的结果。直观地说,您不仅可以根据IP进行分组,还可以根据产品和日期进行分组,因此应该将product_id和Date添加到GROUP BY子句中。因此,您的查询应该更像这样:
SELECT product_id, COUNT(user_ip) as times, user_ip, date
FROM `product_ip_tracking`
GROUP BY product_id, user_ip, date
ORDER BY times DESC, product_id我会让更了解PDO MySQL库的人来帮助你解决你的应用逻辑问题。
https://stackoverflow.com/questions/4099511
复制相似问题