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

すべて問題ありませんが、これが私の問題です。ユーザー名が繰り返されており、どの名前が事前にクエリに含まれるかわかりません。ボブ、スー、ジェームズの可能性があります。または、トム、ディック、ハリー、トムかもしれません。私がする必要があるのは、各ユーザー名と、このオブジェクトに表示される回数を出力することです。非常に奇妙な理由で、クエリで 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 に答える