【问题标题】:Returning the number of records and ignoring duplicates in MySQL / PHP返回记录数并忽略 MySQL / PHP 中的重复项
【发布时间】:2012-02-02 00:38:21
【问题描述】:

我有一个 mySQL 表,其中包含访问过我网站的用户的记录。我想要做的是找出我的表中有多少条记录,但只计算一次重复值以找出有多少唯一访问者。

我正在使用以下代码来查找我每个月获得的点击次数。

$pageViews = mysql_query("SELECT * FROM JB_Statistics WHERE month='$month' ");
$numRowsPV = mysql_num_rows($pageViews) ;

while ($row = mysql_fetch_assoc($pageViews)) {
    $month = $row['month'];
}

echo "<p>Month: $month, Total Hits: $numRowsPV </p>";

表 JB_Statistics 也有一个 ip 地址浏览器字段,其中包含 每次点击的唯一信息,那么有没有办法使用它修改上面的代码并找到每月的唯一访问者

抱歉,如果这是直截了当的,但我执行的每次搜索都会返回有关仅查找重复记录的主题。

【问题讨论】:

  • 记住规则:在数据库中进行所有的数据计算。这就是发明数据库的目的。

标签: php mysql duplicates analytics


【解决方案1】:
SELECT COUNT(*)                             AS DistinctClicks
     , COUNT(DISTINCT IpAddress)            AS DistinctIpAddresses
     , COUNT(DISTINCT Browser)              AS DistinctBrowsers
     , COUNT(DISTINCT IpAddress, Browser)   AS DistinctUsers      --- hopefully
FROM JB_Statistics
WHERE month='$month'

【讨论】:

  • 技术上的错误,您需要同时检查 IP 和浏览器,因为您可能会从 NAT'd IP 后面的计数中剔除人员
  • @Jakub 添加浏览器有什么帮助?如果整个公司都在使用 IE,而且它们都显示为同一个 IP,该怎么办?
  • @antisanity,通常浏览器有不同的指纹,你的论点没有实际意义,因为我的建议只是为每个问题细节添加了另一个区别。按 IP 分组并不能提供全貌。
  • @Jakub 也不按 IP 和浏览器分组。正如你所说,这只是另一个区别......但它肯定不会让 ypercube 技术上错误或你不再正确
  • @ypercube,举个例子,海报不跟踪 mac、用户年龄或鞋码......他们说他们 跟踪 ip + 浏览器。我的意思是,当您使用两者之一时,您的答案还不足以区分。我只是指出这一点。
【解决方案2】:

根据您的描述不准确。

上述答案在 SQL 方面是正确的,您可以使用 GROUP BYDISTINCT 子句,但 IP 地址不会为您提供唯一访问者。一个 IP 后面可以有任意数量的用户。

您可能需要重新考虑使用什么来确定每条记录的独特之处。

【讨论】:

    【解决方案3】:

    你可以使用:

    $pageViews = mysql_query( "SELECT COUNT(DISTINCT uniquefield) FROM JB_Statistics WHERE month='$month'" );
    $row = mysql_fetch_array( $pageViews );
    echo "<p>Month: $month, Total Hits: ", $row[0], "</p>";
    

    【讨论】:

      【解决方案4】:

      通过以下方式修改您的查询:

      SELECT COUNT(DISTINCT ipfield) FROM JB_Statistics WHERE month='$month'"
      

      这应该会产生你想要的。

      【讨论】:

        【解决方案5】:

        使用 GROUP BY:SELECT COUNT(*) FROM JB_Statistics WHERE month='$month' GROUP BY ip_address

        【讨论】:

          猜你喜欢
          • 2020-05-19
          • 1970-01-01
          • 2018-04-26
          • 2012-09-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-01
          • 1970-01-01
          • 2019-04-02
          相关资源
          最近更新 更多