0
$quiztotal = mysql_query('SELECT id,username,qname,quizpercentage FROM quiz');

echo '<table><tr><th>USERNAME</th>
                 <th>QUIZ NAME</th>
                 <th>PERCENTAGE</th>
                 <th>GRADE</th>
                 <th>POINTS</th></tr>';
while($row = mysql_fetch_array($quiztotal))
{
    $username = $row['username'];
    $qtotal = $row['quizpercentage'];
    $defaultsetting = mysql_query('SELECT id,letter,percentage,points FROM default');
    while($row = mysql_fetch_array($defaultsetting))
    {
        $letter = $row['letter'];
        $percentage = $row['percentage'];
        $points = $row['points'];
        echo '<tr><td>'.$username.'</td>
                  <td>'.qtotal.'</td>';
                  echo 'td>';
                    if(qtotal == $percentage)
                    {
                      echo $letter;
                    }
                  echo '</td>';
                  echo '<td>';
                  if($letter)
                  {
                     echo $points;
                  }
                  echo '</td></tr>';
    }
}

测验表

id    username   quizpercentage
1        35          66%
2        47          78%
3        53          90%     
4        56          96%
5        4           45%

默认表

   id     letter   percentage     points
   1        A         >=85         4.00
   2        B         80-84        3.67
   3        C         83-75        2.65
   4        D         74-55        2.00 

这里 >=85 没有从 85% 到 100% 开始,而 80-84 是 80%、81% 和 84% 我如何正确匹配,比如假设用户得分 88%,我如何为每个用户打分,如果等级是 A/B/C/D 我也应该显示分数 我需要像这样的输出

  USERNAME      QUIZ NAME         PERCENTAGE      GRADE   POINTS
   35           TestSeries          85%            A       4.00
   47           TestSeries          70%            C       2.65
   53           preliminary         62%            D       2.00
4

3 回答 3

3

您无法使用现有的表结构轻松完成此操作,您需要进行一些更改。第一个是更改Quiz表格,以便该字段QuizPercentage包含一个数字(不带“%”符号)。无论如何都应该这样做,因为格式化属于网页,而不是数据库。

下一步将在表中添加两列default(这真的是名字吗?如果是,它也不是一个好名字)。两个新列将如下: - PercentageFrom int -PercentageTo int

它们将分别包含每个分数范围的最小值和最大值。这意味着您的表格将如下所示:

  id     letter   percentage     points  PercentageFrom  PercentageTo
   1        A         >=85         4.00        85           100
   2        B         80-84        3.67        84            84
   3        C         83-75        2.65        75            83
   4        D         74-55        2.00        55            74

现在您只需将Quiz表与Scores表连接起来并获取您需要的数据。

SELECT
  Q.id
  ,Q.username
  ,Q.qname
  ,Q.quizpercentage
  ,S.Letter
  ,S.Points
FROM
  Quiz Q
  JOIN
  Scores S ON
    (Q.quizpercentage BETWEEN S.PercentageFrom AND PercentageTo)
于 2012-08-18T17:53:11.843 回答
2

您的默认设置只有人类可读,它应该如下所示:

id     letter   percentage_from percentage_to     points
1        A         85           100               4.00
2        B         80           84                3.67
3        C         75           79                2.65
4        D         55           74                2.00 
5        E         0            54                2.00 

那么您的查询可能类似于:

$quiztotal 
= mysql_query(
'SELECT quiz.id, quiz.username,quiz.qname, default.letter, default.points
 FROM quiz, default 
 where quiz.quizpercentage <= defaut.percentage_to
 and quiz.quizpercentage  >= defaut.percentage_from');

你会得到你想要的所有信息

于 2012-08-18T17:49:41.463 回答
0

查看CASE语法:http ://dev.mysql.com/doc/refman/5.0/en/case-statement.html

于 2012-08-18T17:41:38.900 回答