Мне нужно сделать ТОП материалов по рейтингу!!! Рейтинго такой: 25/5 (5 звезд) Количество голосов: 5 Каждый проголосовал по 5-ке. 5*5=25 рейтинг Мне нужно вывести из базы ТОП материалов. как можно отсортировать их 1) по рейтингу (25) 2) затем по количеству (если там несколько одинаковых рейтингов) Башка болит от этого уже пробовал по разному. Рейтинг и количество голосов находятся в разных колонках в БД SQL PHP: $query = mysql_query("SELECT id, artist, title, rating, total_votes FROM `mp3` WHERE `rating`>'0'"); while($array = mysql_fetch_array($query)){ $rating[] = $array['rating']; //$total_votes[] = $array['total_votes']; $id[] = $array['id']; $ratings[] = $array['rating']/$array['total_votes']; $massive[$array['rating']/$array['total_votes']][$array['rating']] = $array['id']; использовал arsort(); krsort(); вообщем не смог... Нужна помощь...
[sql]SELECT id, artist, title, rating, total_votes FROM `mp3` WHERE `rating`>'0' ORDER BY `rating`;[/sql]
Ага!!! Там материалы могут иметь высокий рейтинг, но они не должны выходить на первые места!!! Первыми могут те у которых пять балов, дальше ниже и ниже.. Пример: Рейтинг |||| Кол-во голосов |||| Баллов (Р/Кол-во) 25 |||||||||| 6 |||||||||||||| 4,1 < = Вот это должен быть на 2-м месте 15 ||||||||| 3 ||||||||||||||| 5 < = Вот это должен быть на первом месте 60 |||||||||| 15 ||||||||||||||| 4 < = Вот это должен быть на 3-м месте
Класс!!! Спасибо!!! Попробую использовать Ваш вариант, думаю тогда кода меньше будет!!! Я уже нашел другой вариант: PHP: $query = mysql_query("SELECT id, artist, title, rating, total_votes FROM `mp3` WHERE `rating`>'0' $country"); while($array = mysql_fetch_array($query)){ $massive[] = array( 'id' => $array['id'], 'rating' => ($array['rating']/$array['total_votes']), 'tatal_votes' => $array['total_votes'], 'artist' => $array['artist'], 'title' => $array['title'], 't_rating' => $array['rating'] ); } usort($massive, 'sort_by_rank'); function sort_by_rank($a, $b) { // Определяем порядок сортировки if ( $a['rating'] == $b['rating'] ) { if ( $a['tatal_votes'] == $b['tatal_votes'] ) { return 0; }elseif($a['tatal_votes'] > $b['tatal_votes']){ return -1;}else{ return 1;} } return ( $a['rating'] > $b['rating'] ) ? -1 : 1; } if(sizeof($massive) > 0){ echo "<table border=0 width="100%">"; for($i=0; $i<=sizeof($massive)-1; $i++){ echo "<tr><td>".$massive[$i]['artist']." - ".$massive[$i]['title']."</td><td width="15%">".$massive[$i]['rating']."/". $massive[$i]['tatal_votes']." [". $massive[$i]['t_rating'] ."]</td></tr>"; } echo "</table>"; } Считываем все в массив, затем сортируем массив функцией usort($massive, 'sort_by_rank'); usort(); - дает возможность использовать свою функцию (sort_by_rank)