2013-07-16 4 views
1

Я пытаюсь перечислить первые 3 наименования, которые чаще всего появляются в моей базе данных MySql.Показать данные по количеству просмотров 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; 

Однако, это не похоже на работу. Какие-либо предложения?

Моя БД состоит из: PeopleName, ID и называется finaldb.

+0

* Обязательно: * The '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 результат по этому запросу, но это все. Вы должны добавить предложения GROUP BY для вашего SQL:

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

Вы также можете проверить, что ваш запрос должен вернуть, запустив его из командной строки тузд или внутри 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

Конечно, вы назначаете totalNumber только $ name, поэтому, когда вы эхо-имя $ name, вы получите только последний totalNumber из своего цикла. – aynber

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

Вы пропускаете Group By, попробуйте этот запрос:

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