返回MySQL/PHP中的记录数并忽略重复项


Returning the number of records and ignoring duplicates in MySQL / PHP

我有一个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地址浏览器字段,每个点击都有唯一信息,所以有没有办法使用它来修改上面的代码并找到每月的唯一访问者

如果这是直接的,我很抱歉,但我进行的每一次搜索都会返回关于只查找重复记录的主题。

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'

根据您的描述不准确。

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

你可能需要重新思考你用什么来识别每一张唱片的独特之处。

您可以使用:

$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>";

按以下方式修改查询:

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

这应该会产生你想要的东西。

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