我有一个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 BY或DISTINCT子句,但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