首页 > 解决方案 > php 表和从数据库中选择,但它们在正确的索引位置不匹配

问题描述

所有开发人员。我正在开发学校管理系统,在数据库中,我有两张表,一张是针对科目的,另一张是为获得的科目分数而设计的,它被称为分数。所以我试图获取主题名称作为表头

我在此查询下方有另一个查询,我正在尝试从分数中获取表数据。

此时,我未能从分数表中匹配主题名称及其分数。

这是我的代码:

<table class="table table-striped table-bordered">
<head>
 <tr>
<?php
// Query for Subject Names

    $view_subject = $config->prepare("SELECT * FROM subjects");
    $view_subject->execute(); 
    while($row = $view_subject->fetch()){
        $sub_name = htmlspecialchars($row['sub_name']);
 ?>
 <th class="text-center"style="background-color:#395C7F;color:#fff;"><?php echo $sub_name;?></th>

<?php } ?>
 
</tr>
</thead>
<body>

<?php
// Query for Subject Scores
$view_scores = $config->prepare("SELECT * FROM scores INNER JOIN subjects ON scores.score_sub_id = subjects.sub_id WHERE scores.std_rand = :random_id ORDER BY scores.score_sub_id ASC");
$view_scores->execute(['random_id' => $rand_ID]); 
while($row = $view_scores->fetch()){

$score_id = htmlspecialchars($row['score_id']);
$score_sub_id = htmlspecialchars($row['score_sub_id']);
$score_mid_amount = htmlspecialchars($row['score_mid_amount']);
$score_final_amount = htmlspecialchars($row['score_final_amount']);

?>

<tr>
    <td class="text-black" data-title="Subject"><?php echo $score_mid_amount;?></td>
</tr>

<?php } ?>
</tbody>
</table>

数据库图像: 1-主题表 科目表

2- 分数表 在此处输入图像描述

** 浏览器用户界面 ** 在此处输入图像描述

标签: phphtmlmysqlpdo

解决方案


在您的第二个循环中,您输入了 '<tr>' 包装每个 '<td>',这意味着每个都到达不同的行,'<td>' 应该与每个 '<th>' 的数量一样多线....所以:

<?php
// Query for Subject Scores
$view_scores = $config->prepare("SELECT * FROM scores INNER JOIN subjects ON scores.score_sub_id = subjects.sub_id WHERE scores.std_rand = :random_id ORDER BY scores.score_sub_id ASC");
$view_scores->execute(['random_id' => $rand_ID]); 
?>
<tr> 
<?php
while($row = $view_scores->fetch()){

$score_id = htmlspecialchars($row['score_id']);
$score_sub_id = htmlspecialchars($row['score_sub_id']);
$score_mid_amount = htmlspecialchars($row['score_mid_amount']);
$score_final_amount = htmlspecialchars($row['score_final_amount']);

?>


    <td class="text-black" data-title="Subject"><?php echo $score_mid_amount;?></td>


<?php } ?>
</tr>
</tbody>
</table>

这应该可以修复您的表格,但只会创建一行!如果您有不止一行,则需要添加另一个循环来包装这一行,它将在内循环之外创建新的“<tr>”。

顺便说一句:我假设第二个 while 循环与第一个循环完全一样长......因为如果它的长度不同或排序不同,那么每行每 <th> 应该有相同数量的 <td>方式你会有一个问题......这可以通过调整你的SELECT或创建一个带有ID的数组并根据第一个带来的键从第二个循环中注入数据来解决。


推荐阅读