我使用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>
问题截图: 所以我看到了关于同一主题的几个问题但是所有的解决方案都没有用于:\
我试图使用:
$q->fetchAll(PDO::FETCH_ASSOC);
而不是fetchAll();
但它没有用。
如果我使用while循环
,那就是同样的问题答案 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个表的结构
,因此无法为您的查询提供正确的答案