2012-04-27 10 views
0
私は繰り返しユーザ名がありますが、私の問題であり、ここで、

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"; 
} 

すべての罰金のようなものを単にユーザ名を持つクエリから結果セットを返しますが、PHP 5.3とmysqliのを使用して

、私はどの名前が手に入る前に質問に出るのか分からず、ボブ、訴訟、ジェイムスになる可能性があります。それとも、トム、ディック、ハリー、トムかもしれない。私がする必要があるのは、各ユーザ名とこのオブジェクトに何回表示されるかを表示することです。非常に奇妙な理由のために、私はgroup byやcount(*)のようなきちんとしたものを使ってはいけません(質問するのは本当に奇妙です)。だから私の質問は、各一意の名前と何回出現するかを取得するために、返されたオブジェクト(または必要に応じて連想配列)をループする最も速い方法です。あなたの助けをありがとう、これは新入生のCSの質問は、私は自己教えて常にギャップを埋めている場合は謝罪!

答えて

1

あなたは本当に代わりGROUP BY句を使用してのPHP側でそれを行う必要がある場合:

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_object()の代わりにfetch_array()を使うことです。ありがとう、コードだけでなく、配列の教育! – vaene

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