fetchAll()打印数据两次

时间:2018-05-09 04:56:35

标签: php

我使用2 foreach()

获取数据时出现问题

加载页面时的问题我得到了两次相同的行。

例如$row['1']

$row['1'] = "Name";

我明白了:

NAME
NAME

我的代码:

$query = "SELECT gid,group_time,name_student,certificate_id,course_id,course_title,course_days FROM  groups JOIN students JOIN courses  WHERE group_id = ? ";
$q = $connection->prepare($query);
if(!$q){

  die("rip".mysqli_error($connection));
}
$q->bindparam(1,$gid);
$q->execute();
$all = $q->fetchAll(PDO::FETCH_ASSOC);

这是我的表:

<table dir="rtl" class="table table-bordered table-striped table-hover">
            <thead>

<tr>


    <th class="text-center">name of student</th>

    <?php
    foreach($all as $r2){

      echo '<div dir="ltr"class="h4 text-center " style="text-decoration:underline;text-decoration-skip: ink;">report</div>';
      echo '<div dir="ltr"class="h3 text-center" style="text-decoration:underline;text-decoration-skip: ink;">'.$r2['course_title'].'('.$r2['group_time'].')</div>';
echo "<br>";
    for ($i = 1; $i <= $r2['course_days']; $i++) {

        echo "<td class='text-center'>$i</td>";
    }

}

    ?>

</tr>
</thead>
<tbody>



<?php
foreach($all as $r){
echo "<tr>";
print "<td class='text-center'>".$r['name_student']."</td>";

for ($i = 1; $i <= $r['course_days']; $i++) {

    print "<td></td>";
}
echo "</tr>";

}

?>


</tbody>

</table>

问题截图: enter image description here 所以我看到了关于同一主题的几个问题但是所有的解决方案都没有用于:\

我试图使用:

$q->fetchAll(PDO::FETCH_ASSOC);

而不是fetchAll();

但它没有用。

如果我使用while循环

,那就是同样的问题

1 个答案:

答案 0 :(得分:1)

假设您的数据库是MySQL。

您的PHP代码看起来不错,但此查询很难正确,可能是您的问题的根源:

SELECT id,group_time,name_student,certificate_id,course_id,course_title,course_days 
FROM  groups 
JOIN students 
JOIN courses  
WHERE group_id = ? 

您的JOIN没有ON条款。这意味着它们被解释为CROSS JOIN,这会在您的3个表格之间产生笛卡尔积“。所以你有太多行返回

您应该执行类似

的操作
SELECT id,group_time,name_student,certificate_id,course_id,course_title,course_days     
FROM  groups G
JOIN students S ON G.id=S.group_id
JOIN courses  C ON G.id=C.group_id
WHERE group_id = ? 

由于您没有显示3个表的结构

,因此无法为您的查询提供正确的答案