2016-06-30 13 views
1

Добрый день, я работаю над некоторой системой подсчета очков, которая будет отображать все оценки всеми пользователями и будет суммировать ее с использованием PHP от MySQL. Результат работает нормально и вычисляется (вычисление выполняется с php, а не на MySQL). Теперь моя проблема в том, как я могу оценивать общие баллы от наивысшего до самого низкого.Получить ранжирование значений TOTAL из PHP, которые не хранятся в mysql

Вот код:

$sel_query="Select * from tbl_scores"; 
$result = mysql_query($sel_query); 
while($row = mysql_fetch_array($result)) { 
$crit_3 = $row["crit_3"]; 
$crit_3a = number_format($crit_3); 

$crit2_3 = $row["crit2_3"]; 
$crit2_3a = number_format($crit2_3); 

$crit3_3 = $row["crit3_3"]; 
$crit3_3a = number_format($crit3_3); 

$user1 = ($crit_3) ; 
$user2 = ($crit2_3); 
$user3 = ($crit3_3); 
$divide = ($user1 + $user2 + $user3); 
$total = number_format($divide/9 , 2, '.', ''); 
$average = number_format($total * 0.15 , 2, '.', ''); 
?> 

Спасибо заранее.

+1

1.Пожалуйста, прекратите использование (устарело + удалено) 'mysql_ *', используйте 'mysqli_ *' ИЛИ 'PDO'.2. Определите переменную массива за пределами цикла, а внутри в цикле присваивают общие баллы этому массиву 0,3. Теперь вы получите массив баллов, и теперь вы можете использовать короткие методы для получения данных правильно. Спасибо –

ответ

1

1.Пожалуйста, прекратите использование (устарели от php5.5 + удалены с php7) mysql_*, используйте mysqli_* ИЛИ PDO.

2. Определите переменную массива вне цикла, а внутри в цикле присвойте итоговые оценки этому массиву.

3. Теперь вы получите массив баллов, и теперь вы можете использовать метод rshort(), чтобы получить данные правильно.

Так что код должен быть, как показано ниже: -

$sel_query="Select * from tbl_scores"; 
$result = mysql_query($sel_query); 
$scores_array = array();//create an array 
while($row = mysql_fetch_array($result)) { 
$crit_3 = $row["crit_3"]; 
$crit_3a = number_format($crit_3); 

$crit2_3 = $row["crit2_3"]; 
$crit2_3a = number_format($crit2_3); 

$crit3_3 = $row["crit3_3"]; 
$crit3_3a = number_format($crit3_3); 

$user1 = ($crit_3) ; 
$user2 = ($crit2_3); 
$user3 = ($crit3_3); 
$divide = ($user1 + $user2 + $user3); 
$total = number_format($divide/9 , 2, '.', ''); 
$average = number_format($total * 0.15 , 2, '.', ''); 
$scores_array[$row['user_name']] = $total; // assign total to the array and i assume that your table has one column name user_name for each user, change accordingly 
} 
rsort($scores_array);// sort the array in decending order of total scores 
foreach ($scores_array as $key=>$value){ // iterate through array 
     echo $key.'has scored total score:-'.$value; //print the score along with username 
} 
?> 

Примечание: - Пожалуйста, возьмите имена переменных таким образом, что они не будут производить какой-либо двусмысленности.

+0

Спасибо. Он работает, один вопрос, хотя, что вы подразумеваете под первым пунктом? Это мое первое приложение, использующее PHP. Спасибо кучу – Joshua

+0

Фактически 'mysql_ *' - это старая библиотека, используемая в версиях php ниже 5.5. Теперь эта библиотека полностью удалена из последней версии php. Таким образом, ваш код не будет работать, если вы подойдете к последней версии php. вот что я говорю –

+0

И попробуйте обновить свои версии php. Так что ваш код будет работать для каждой последней версии php. –

Смежные вопросы