0

使用 php 5.3 和 mysqli 我从一个只有用户名的查询中返回一个结果集,比如

$query_username = "SELECT username FROM some_table WHERE param = 1";
$username =  $mysqliObject->query($query_username);

while($row_username = $username->fetch_object()){
print "<br>Username: $row_username->username";
}

很好,但这是我的问题,有重复的用户名,而且我不知道事先查询中会出现哪些名称,可能是 bob、sue、james。或者它可能是汤姆,迪克,哈利,汤姆。我需要做的是打印出每个用户名以及它在这个对象中出现的次数。出于非常奇怪的原因,我不能在查询中使用诸如 group by 和 count(*) 之类的简洁的东西(不要问它真的很奇怪)。所以我的问题是,遍历返回的对象(或关联数组,如果需要)以获取每个唯一名称及其出现次数的最快方法是什么。感谢您的帮助,如果这是一个新生 CS 问题,我深表歉意,我是自学成才,总是填补空白!

4

2 回答 2

1

例如

$users = array();
while( false!==($row=$result->fetch_array()) ){
    if ( isset($users[$row['username']]) ) {
        $users[$row['username']] += 1;
    }
    else {
        $users[$row['username']] = 1;
    }
}
asort($users);
于 2012-04-27T06:14:57.110 回答
1

如果您真的必须在 PHP 端执行此操作而不是使用GROUP BY子句:

while($row_username = $username->fetch_object())
{
    if(isset($usernames[$row_username['username']]))
    {
        $usernames[$row_username['username']]++;
    }
    else
    {
        $usernames[$row_username['username']] = 1;
    }
}

asort($usernames);
// use ksort() to sort by username instead of the count

// print out the usernames
foreach($usernames as $username => $count)
{
    echo $username . ", count: " . $count;
}
于 2012-04-27T06:18:17.127 回答