2012-04-27 61 views
0

使用PHP 5.3的mysqli我返回从刚刚有用户名查询的结果集,像PHP的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问题,我自学成才,并始终填补空白!

回答

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; 
} 
+0

完美,真是棒极了!我唯一的评论是使用fetch_array()而不是fetch_object()作为例子。感谢,不仅是代码,还有阵列教育! – vaene 2012-04-27 17:33:26

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);