MySQL上的MySQL结果不正确

时间:2017-05-15 05:56:49

标签: php mysql

我正计算用户帐户的唯一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

,结果是正确的

1 个答案:

答案 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