MySQL基于多个因素计算唯一行

时间:2015-06-14 08:35:43

标签: php mysql

我需要根据唯一的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);
)

请查看是否可以这样做,并建议一种方法。 感谢

修改

感谢所有答案,解决方案正在运行我正在检查行上的查询而不是结果。

4 个答案:

答案 0 :(得分:1)

我认为可以通过这种方式完成

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

while($row = mysqli_fetch_assoc($result))
{
print_r($row);
}

答案 3 :(得分:1)

SELECT DISTINCT(u_ip), count(u_id) AS count FROM t1 GROUP BY u_ip;

然后使用for loopforeach

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

或使用

foreach ($result as $res){}