2012-04-27 2 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를 사용

, 그리고 나는 어느 이름이 손에 들어가기 전에 어떤 이름이 될지 모른다. bob, sue, james 일 수있다. 아니면 톰, 거시기, 해리, 톰이 될 수 있습니다. 내가해야 할 일은 각 사용자 이름과이 객체에 나타나는 횟수를 출력하는 것입니다. 아주 이상한 이유들로 나는 group by와 count (*)와 같은 깔끔한 것을 쿼리에서 사용할 수 없다. 그래서 내 질문은 반환 된 개체 (또는 필요한 경우 연관 배열)를 루프하는 가장 빠른 방법은 각 고유 한 이름과 나타나는 횟수를 구하는 것입니다. 도와 주셔서 감사합니다. 그리고 이것이 신입생 연계 문제라면 사과드립니다. 저는 스스로 가르치고 항상 공백을 채우고 있습니다!

답변

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