首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每天跟踪独特的产品视图时遇到问题

每天跟踪独特的产品视图时遇到问题
EN

Stack Overflow用户
提问于 2010-11-05 01:38:47
回答 1查看 226关注 0票数 1

我对它进行了设置,这样每次查看产品时,都会更新数据库表daily_product_stats中的一个值。它应该在每个产品的每个会话中只计算一次您的视图。因此,要查看产品435今天的浏览量,我们可以很容易地做到这一点,并很容易地看到哪个产品今天被观看的次数最多。

但我开始注意到奇怪的结果,比如产品2324在上午9点前被浏览了36次我怀疑有什么不对劲,因为这不是一个很受欢迎的产品。

所以我决定用一个ip来跟踪每个单独的视图,以确保每个视图都是唯一的。因此,每次我更新daily_product_stats时,我都会在product_ip_tracking中插入一个包含IP的新行。

所以我这样做了几分钟,结果变得很奇怪。

首先,下面是执行跟踪的页面上的代码:

代码语言:javascript
复制
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都应该有那么多行。

因此,我让它运行了几分钟,然后在数据库上运行以下查询:

代码语言:javascript
复制
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。我觉得这很奇怪,因为我不认为这是可能的。我完全不确定这里发生了什么。

有谁有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-05 01:47:57

您的select查询看起来有点怪异,所以这可能解释了怪异的结果。直观地说,您不仅可以根据IP进行分组,还可以根据产品和日期进行分组,因此应该将product_id和Date添加到GROUP BY子句中。因此,您的查询应该更像这样:

代码语言:javascript
复制
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库的人来帮助你解决你的应用逻辑问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4099511

复制
相关文章

相似问题

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