繁体   English   中英

MySQL根据多个因素计算唯一行

[英]MySQL count unique rows based on multiple factors

我需要根据唯一的IP查找唯一的行,然后在单个查询中按用户对结果进行排序。

我正在尝试这种方式

$query="SELECT 
COUNT(DISTINCT `userip`) AS `count`,
`userid` AS `userid`
FROM `tablename` 
WHERE (`date` >= UNIX_TIMESTAMP(CURDATE())) GROUP BY `userid`";
$result = mysqli_query($connection, $query) or trigger_error(mysqli_error($connection), E_USER_ERROR);  
$row = mysqli_fetch_assoc($result);
print_r($row);

这给了我最后一个用户的结果

Array ( [count] => xxx [userid] => last_user);

我需要在单个查询中为每个用户获取此结果,因为

Array ( 
    Array ( [count] => xxx [userid] => first_user);
    .
    .
    Array ( [count] => xxx[userid] => last_user);
)

请查看是否可以做到这一点,并提出一种解决方法。 谢谢

编辑

感谢您提供所有答案,该解决方案正在有效,我正在检查查询而不是结果查询。

我认为可以这样

$query = "SELECT 
COUNT(*) AS `count`,
`userid` AS `userid`
FROM `tablename` 
WHERE (`date` >= UNIX_TIMESTAMP(CURDATE())) GROUP BY `userid`";

我认为您应该在userip和userid列上都使用group by。 查看下面的查询是否适合您。

SELECT COUNT( `userip`) AS `count`, `userid` AS `userid` FROM `tablename` WHERE (`date` >= UNIX_TIMESTAMP(CURDATE())) GROUP BY userid,userip; 

哦,你必须在循环中获取结果

while($row = mysqli_fetch_assoc($result))
{
print_r($row);
}
SELECT DISTINCT(u_ip), count(u_id) AS count FROM t1 GROUP BY u_ip;

然后在php for loop使用for loopforeach

for ($i=0;$i<$row;$i++)
{
   echo "<tr><td>".$result["u_id"][$i]."</td><td>".$result["count"][$i];
}

或使用

foreach ($result as $res){}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM