0

我正在对三列进行查询;一列包含文本,另外两列包含数字。我对这些数字进行了计算,得到了一个名为 $average 的新数字。然后我将结果吐出到一个 html 表中。表中的行按照它们从数据库中出来的顺序排序。我正在尝试对表格进行排序,以便数据从最高 $average 显示到最低(同时仍与第一列中的正确文本值正确关联)。

我已经尝试了一些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

3 回答 3

2

您可以在查询中进行计算和排序:

SELECT 
    quiz_name, 
    quiz_attempts, 
    cumulative_score,
    (cumulative_score/quiz_attempts) as score_avg
FROM scoredata
ORDER BY score_avg DESC
于 2013-11-11T21:38:47.620 回答
1

你可以

  • 让数据库进行排序(如其他海报所建议)
  • 自己对数据进行排序(就像您尝试做的那样)
  • 让用户通过 JavaScript 函数对数据进行排序。我最喜欢的是 http://www.javascripttoolbox.com/lib/table/
于 2013-11-11T21:36:29.280 回答
0

将此作为您的查询

    SELECT quiz_name, 
           quiz_attempts, 
           cumulative_score,
           cumulative_score / quiz_attempts as avg_score
    FROM scoredata
    ORDER BY avg_score
于 2013-11-11T21:39:45.693 回答