我正计算用户帐户的唯一IP访问次数。我在检查总访问次数与分组用户帐户访问次数方面得到的结果不同
我的表结构是这样的
id userid userip status date
1 xxxx 11111 1 unix timestamp
2 yyyy 11122 1 unix timestamp
3 zzzz 11133 1 unix timestamp
4 cccc 11144 1 unix timestamp
我正在做这样的查询
$date1 = strtotime("yesterday midnight");
$date2 = strtotime("today midnight");
SELECT `userid`, COUNT(DISTINCT `userip`) AS `total` FROM `stats`
WHERE (`date` >= $date1 AND `date` < $date2) AND `status`=1
这给出结果为5644
但是当我按userid
分组时结果不同
$date1 = strtotime("yesterday midnight");
$date2 = strtotime("today midnight");
SELECT `userid`, COUNT(DISTINCT `userip`) AS `total` FROM `stats`
WHERE (`date` >= $date1 AND `date` < $date2) AND `status`=1 GROUP BY `userid`
while($row=mysqli_fetch_assoc($result)){
$total=$total+$row['total'];
}
结果为6312
请参阅
,了解为什么组有不同的结果由于
修改
如果我不算DISTINCT
答案 0 :(得分:0)
很明显,count
不会像您在第一个查询中那样使用distinct with count,现在提取的行是5644
。
可能会使用2,3,4,5
这样的值进行计数,因此如果您需要与group by
相同的计数,则需要添加所有与查询相同的计数列
如果您需要使用以下查询的唯一用户
SELECT DISTINCT `userip` AS `userip` FROM `stats`
WHERE (`date` >= $date1 AND `date` < $date2) AND `status`=1
对于具有唯一IP的用户
SELECT userid,userip from stats GROUP BY userip HAVING COUNT(*) >=1