【问题标题】:Display a table with multiple columns that differ in condition for each column PHP MySQL显示具有多列的表,每列的条件不同 PHP MySQL
【发布时间】:2018-05-17 00:08:13
【问题描述】:

我在学生表中有这些数据:

stu_id  stu_name   stu_exam   stu_exam_year  stu_mark  stu_grade  stu_est_mark  stu_est_grade
111     Alice      First      2015           80        A          
111     Alice      Mid        2015           75        B
111     Alice      Final      2015           65        B

222     Frankline  First      2015           75        B
222     Frankline  Mid        2015           60        B
222     Frankline  Final      2015           50        C

我想以表格形式输出数据,如下所示,其中估计成绩 = 每次考试的总分 / 满分的总分 * 100

No    ID    Name       First-term Exam     Mid-term Exam       Final Exam         Estimated
                       Mark   |  Grade     Mark   |  Grade   Mark   |  Grade    Mark   |  Grade
1     111   Alice      80         A        75        B       65         B       73      B
2     222   Frankline  75         B        60        B       50         C       62      B

我尝试使用这个 SELECT 语句

<?php
$no = 0;
query = "SELECT * FROM student GROUP BY stu_id;"

$result_set =  mysqli_query($con, $query);

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

$no++;
?>

并在下面应用一些条件

<td><?php echo $no; ?></td>                        
<td><?php echo $row['stu_name']; ?></td>

<!--This is for First-term -->
<?php if(($row['stu_exam'] == "First"){ ?>
<td><center><?php echo $row['stu_mark']; ?></center></td>
<td><center><?php echo $row['stu_grade']; ?></center></td>
<?php }
else {?>
<td><center></center></td>
<td><center></center></td>
<?php } ?>

<!--This is for Mid-term -->
<?php if(($row['stu_exam'] == "Mid"){ ?>
<td><center><?php echo $row['stu_mark']; ?></center></td>
<td><center><?php echo $row['stu_grade']; ?></center></td>
<?php }
else {?>
<td><center></center></td>
<td><center></center></td>
<?php } ?>

<!--This is for Final -->
<?php if(($row['stu_exam'] == "Final"){ ?>
<td><center><?php echo $row['stu_mark']; ?></center></td>
<td><center><?php echo $row['stu_grade']; ?></center></td>
<?php }
else {?>
<td><center></center></td>
<td><center></center></td>
<?php } ?>

但查询只是读取每个stu_id表中行的第一个列表并输出如下

No    ID    Name       First-term Exam     Mid-term Exam       Final Exam         Estimated
                       Mark   |  Grade     Mark   |  Grade   Mark   |  Grade    Mark   |  Grade
1     111   Alice      80         A        
2     222   Frankline  75         B    

为什么?我想计算估计分数(平均),其中每门考试的所有分数之和除以所有考试的总分数。如何生成这些值并将生成的值更新到学生表中的 stu_est_mark 和 stu_est_grade 属性。

【问题讨论】:

  • 分组依据折叠所有行。这可能有用stackoverflow.com/questions/33351330/php-mysqli-group-by
  • @Chhitij 但我不应该按它分组吗?因为我需要折叠 3 行才能变成 1 行吗?如果我误解了基本内容,我很抱歉.. 我是这个编程世界的新手..
  • Group By 只是将行折叠成一个。我想你指的是加入和分组
  • 在我上面的例子中..我应该如何分组和加入他们?
  • 我已经编辑了我的答案。我犯了一个错误。对此感到抱歉。将第一个变量名称更改为 $q1 而不是 $q2。它会工作

标签: php database mysqli html-table


【解决方案1】:

可以做的一件事是从数据库中获取所有数据,然后根据您的 php 代码中的学生 ID 对分数进行分类。 比如:

$q1=mysqli_query($con,"SELECT DISTINCT(stud_id) FROM student");
while($row=mysqli_fetch_assoc($q1))
{
   $q2=mysqli_query($con,"SELECT * FROM student where stud_id=".$row['stud_id']);
   while($r=mysqli_fetch_assoc($q2))
   {
       //your code
   }
}

【讨论】:

  • 它只会读取 1 名学生和她的所有考试成绩。它在相应的列中显示了 3 行 Alice 的考试结果。
  • 你确定你正确使用了循环的括号吗?因为出乎意料
  • 好的,现在它输出所有结果,但 6 行.. 3 Alice,3 Frankline。如何使它只有 2 行? Alice 有 1 行,相应列有 3 个考试结果,Frankline 有 1 行,相应列有 3 个考试结果。
  • 这取决于您的 html。如果您结束该行并开始一个新行,那么只有该行才会改变。确保在正确的地方使用
  • Yikes 迭代查询表现不佳。
【解决方案2】:
query = "SELECT * FROM student GROUP BY stu_id;"

我的 SQL 有点生疏,但 Group By 可能是原因

试一试

query = "SELECT * FROM student

如果这不起作用,您可能希望使用查询中的连接命令将每个学生的 3 个条目聚合到一行中

【讨论】:

  • 它会生成一个有 6 行的表格。 3 爱丽丝和 3 富兰克林,各有考试成绩
  • 如何在查询中使用 join 命令将每个学生的 3 个条目聚合到一行中?
  • 好吧,这很好,至少它读取所有数据并做它的意思,现在我们只需要将它放在 1 行而不是 3 行,你使用 MySQL 还是 MSSQL?
  • 在使用 pivot 进行一些快速研究之后可能会对您有所帮助,我之前没有使用过这个,所以我不确定它是否有帮助,但我会添加链接,以便您可以查看 @987654321 @
  • 我正在使用 MySQL
【解决方案3】:

尝试使用

if (row['stu_exam']=='Mid')

== does not work as expected with string. So, try using === for strings.

也可以尝试使用 elseif。这就是创建 elif 的原因。

【讨论】:

  • @Yun 试试 elif 而不是 if 到处都是。
  • 如何申请elif?我从未听说过 elif。
  • Elif 是 else if 的缩写。用 elseif @Yun 替换你的第二个和第三个 if。对不起,我输入了 elif。它的elseif
猜你喜欢
  • 2021-09-09
  • 1970-01-01
  • 1970-01-01
  • 2013-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-23
  • 1970-01-01
相关资源
最近更新 更多