У меня проблема при получении данных с помощью 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

php
2
MRDV 9 Май 2018 в 07:56

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, в результате получается декартово произведение между вашими тремя таблицами. Итак, вы вернули слишком много строк

Вы должны сделать что-то вроде

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 таблиц.

1
Thomas G 9 Май 2018 в 07:03