2013-11-11 3 views
0

Я выполняю запрос по трем столбцам; один столбец содержит текст, остальные два содержат числа. Я делаю расчет на этих числах, чтобы получить новый номер с именем $ average. Затем я выплевываю результат в таблицу html. Строки в таблице сортируются в том порядке, в котором они выходят из базы данных. Я пытаюсь сортировать таблицу так, чтобы данные отображались с наивысшего значения $ average до самого низкого (при этом все еще правильно связаны с правильным текстовым значением из первого столбца).php, сортировать массив из mysql

Я пробовал некоторые asort и foreach, но мне удалось только создать беспорядок ошибок.

Любые идеи как я об этом? Спасибо.

Это текущее состояние игры:

/ db query 
    if (!$result = mysqli_query($link,"SELECT quiz_name, 
              quiz_attempts, 
              cumulative_score 
             FROM scoredata")) { 
    echo("There was a problem: " . mysqli_error($link)); 
    exit(); 
    } 
... 
// got results? 
    if(mysqli_num_rows($result) >= 1) { 

    $output = ""; 
    $output .= "<table>\n"; 
    $output .= "<tr><th>Quiz name</th> <th>Played</th> <th>Avg. score</th></tr>\n"; 

    while($row = mysqli_fetch_array($result)) { 

    $output .= "<tr><td>".str_replace('_', ' ', $row['quiz_name']) . "</td>"; 
    $output .= "<td>" . $row['quiz_attempts'] . "</td>"; 

    // calculate average score 
    $average = $row['cumulative_score']/$row['quiz_attempts']; 

    $output .= "<td>" . round($average,2) . "</td></tr>"; 
    } 

    $output .= "</table>\n"; 
    echo $output; 
} 
... 
+4

Вы можете сортировать данные в вашей БД - нет необходимости Сортируйте его после получения. – Artur

+2

и выполните расчеты с вашим запросом. –

+0

Есть ли причина, по которой вы не можете сортировать в своем SQL-запросе? –

ответ

2

Вы можете сделать расчет и сортировка в запросе:

SELECT 
    quiz_name, 
    quiz_attempts, 
    cumulative_score, 
    (cumulative_score/quiz_attempts) as score_avg 
FROM scoredata 
ORDER BY score_avg DESC 
+0

А, я понятия не имел, что все может быть сделано таким образом. Работает отлично, и много оперетты. благодаря – user2980808

1

Вы можете

  • пусть дб сделать сортировку (как это было предложено другими плакатами)
  • сортировать данные самостоятельно (как вы пытаются сделать)
  • Позвольте пользователю сортировать данные с помощью функций JavaScript. Мой любимый http://www.javascripttoolbox.com/lib/table/
0

сделать этот запрос

SELECT quiz_name, 
      quiz_attempts, 
      cumulative_score, 
      cumulative_score/quiz_attempts as avg_score 
    FROM scoredata 
    ORDER BY avg_score 
Смежные вопросы