2013-07-16 3 views
1

MySql 데이터베이스에서 가장 자주 나타나는 상위 3 개 이름을 나열하려고합니다.출현 횟수를 기준으로 데이터 표시 MYSQL

이것은 내가 할 사용하고 무엇을 : 작동하지 않는 것 그러나

 $nameQuery = "SELECT PeopleName, COUNT(*) AS totalNumber FROM finaldb ORDER BY  COUNT(PeopleName) LIMIT 5"; 
     $nameResult = mysql_query($nameQuery); 
     while($data = mysql_fetch_array($nameResult)) { 

       $name = $data['totalNumber']; 
     } 

echo $name; 

. 어떤 제안?

내 DB는 PeopleName, ID로 구성되며 finaldb라고합니다.

+0

* 필수 *은''mysql_로 * 함수 [PHP 5.5되지]는 (http://php.net/manual/en/faq.databases.php#faq.databases.mysql.deprecated) . 나중에 새 코드를 작성하는 것은 권장하지 않으므로 나중에 업그레이드하지 못할 수도 있습니다. 대신 [MySQLi] (http://php.net/manual/en/book.mysqli.php) 또는 [PDO] (http://php.net/manual/en/book.pdo.php)를 사용하십시오. [더 나은 PHP 개발자가 되십시오] (http://jason.pureconcepts.net/2012/08/better-php-developer/). –

+0

작동하지 않는 경우 - 어떤 기능을합니까? 추락? 오류 메시지를 제공 하시겠습니까? 잘못된 데이터를 반환 하시겠습니까? 모든 데이터가 아닌 올바른 데이터를 반환 하시겠습니까? – andrewsi

+0

@andrewsi 아무 것도 반환하지 않습니다. – qweqweqwe

답변

1

해당 검색어로 1 개의 결과가 반환되어야하지만 그게 전부입니다. 당신은 당신의 SQL에 GROUP BY 절을 추가해야합니다

SELECT PeopleName, COUNT(PeopleName) AS totalNumber FROM finaldb GROUP BY PeopleName ORDER BY COUNT(PeopleName) DESC LIMIT 5 

또한 쿼리는 MySQL의 명령 줄을 실행하거나 phpMyAdmin을 내부에 반환해야 확인할 수 있습니다.

루프는 최근 totalNumber를 $ name에만 할당합니다. 당신은 모든 데이터를 에코하려면이 시도 :

while($data = mysql_fetch_array($nameResult)) { 

      echo "{$data['PeopleName']} - {$data['totalNumber']}\n"; 
    } 

데이터를 추가하려면, 단지 열 이름을 계속 추가 : 당신은 그룹으로 누락

  echo "{$data['PeopleName']} - {$data['totalNumber']} - {$data['Gender']} - {$data['Age']}\n"; 
+0

실제 숫자 카운트를 반환하지만 데이터 자체는 반환하지 않습니다. – qweqweqwe

+0

무엇이 돌아오고, 무엇을 찾고 있습니까? 'John 10 James 8 Robert 7' – aynber

+0

과 같이 반환해야합니다. 물론 $ NAME에 totalNumber 만 지정하면 $ name을 에코 할 때 루프에서 마지막 totalNumber를 가져옵니다. – aynber

1
SELECT 
    PeopleName 
    count(PeopleName) 
FROM 
    finalDB 
GROUP BY 
    PeopleName 
ORDER BY 
    count(PeopleName) DESC 
LIMIT 0,3 
2

을,이 쿼리를 시도 :

$nameQuery = "SELECT PeopleName, COUNT(PeopleName) AS totalNumber FROM finaldb GROUP BY PeopleName ORDER BY  COUNT(PeopleName) LIMIT 5"; 
+0

실제 숫자 카운트를 반환하지만 데이터 자체는 반환하지 않습니다. – qweqweqwe

1

루프가 이름을 그대로 유지하지 않고 단순히 이전 이름을 다음 값으로 덮어 씁니다. 값의 배열을 만들거나 루프 내에서 적어도 출력을해야합니다. 예 :

$names = array(); 
while(...) { 
    $names[] = array('name' => $data['PeopleName'], 'total' => $data['totalNumber']); 
} 
var_dump($names); 
관련 문제