В основном вы исчерпали набор результатов второго запроса после завершения первой итерации внешнего запроса.
Есть несколько способов сделать это, вот пара предложений
Сначала вы можете загрузить все результаты второго запроса в массив, а затем просто повторно обрабатывать массив каждый раз вокруг внешнего цикла. Однако функция fetch_all()
доступна только в том случае, если у вас установлен собственный драйвер MYSQL. (MYSQLIND)
<?php
$my_sqli = new mysqli('localhost', 'root', '', 'taskpro');
if (!$my_sqli) {
die('Connect Error: ' . mysqli_connect_errno());
}
$data1 = $my_sqli->query("SELECT * FROM task_table") or die($my_sqli->error);
$data2 = $my_sqli->query("SELECT * FROM taskinfo") or die($my_sqli->error);
$allData2 = data2->fetch_all(MYSQLI_ASSOC);
while ($row = $data1->fetch_assoc()) {
echo "<br>";
echo $row['id'];
echo "<br>";
foreach ( $allData2 as $row ) {
echo $row2['id'];
}
} // end parent loop
?>
Или вы можете использовать функцию mysqli_result::data_seek()
для сброса указателя на первую строку результата запроса, например
<?php
$my_sqli = new mysqli('localhost', 'root', '', 'taskpro');
if (!$my_sqli) {
die('Connect Error: ' . mysqli_connect_errno());
}
$data1 = $my_sqli->query("SELECT * FROM task_table") or die($my_sqli->error);
$data2 = $my_sqli->query("SELECT * FROM taskinfo") or die($my_sqli->error);
while ($row = $data1->fetch_assoc()) {
echo "<br>";
echo $row['id'];
echo "<br>";
$data2->data_seek(0); // make sure the pointer is at the beginning before looping
while ($row2 = $data2->fetch_assoc()) {
echo $row2['id'];
}
}
?>