修剪数据库中的值

时间:2012-08-18 17:38:14

标签: php mysql

$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 

这里&gt; = 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

3 个答案:

答案 0 :(得分:3)

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

下一步是向表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)

答案 1 :(得分: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');

并且您拥有所需的所有信息

答案 2 :(得分:0)