2017-05-15 50 views
1

我正在計算用戶帳戶的唯一IP訪問。我正在檢查總訪問VS分組後的用戶帳戶訪問MySQL對羣組的錯誤結果

得到不同的結果

我的表結構是喜歡這樣

$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 

這本

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 

我做的查詢給出的結果爲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

@knowledge .... no joins –

回答

0

其顯而易見的是count不會匹配,因爲您在第一個查詢中使用了與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 
+0

你能告訴我我應該修改在查詢 –

+0

你正在分配值的IP計數到用戶ID? –

+0

對不起,這是拼寫錯誤我沒有分配任何值 –