2012-04-27 3 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

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); 
Смежные вопросы