Как получить связанные дочерние строки, когда я перебираю строки из родительской таблицы?

Мне нужно выполнить подзапрос (или что-то), поскольку я перебираю строки внешнего запроса. Я пробовал столько, сколько я могу найти, но не смог заставить его работать.

Вот мой цикл while:

$sql = "SELECT * FROM $db ORDER BY Created DESC";
$ps = $pdo->prepare($sql);
if (!$ps) {
echo "\nPDO::errorInfo():\n";
print_r($dbh->errorInfo());
}else{
$ps->execute();
$ps->setFetchMode(PDO::FETCH_OBJ);
while($row = $ps->fetch()) {

echo "<tr>\n";

echo "  <td>". $row->SARNo . "</td>\n";
echo "  <td>". $row->Quals . "</td>\n";
echo "  <td>". <!-- how do I insert results of $query here? --> . "</td>\n";
echo "  <td>". $row->CAGE . "</td>\n";
echo "  <td>". $row->Supplier_Name . "</td>\n";
echo "  <td>". $row->Assigned_To_HEBCO . "</td>\n";
echo "  <td>". $row->SAR_Completed . "</td>\n";

echo "</tr>\n";

}
}

А вот запрос для получения связанных NSN для текущей записи:

$query = "SELECT NSN_Src.NSN FROM NSN_Src INNER JOIN (SAR2 INNER JOIN REL_SAR_NSN ON SAR2.ID = REL_SAR_NSN.SAR_ID) ON NSN_Src.ID = REL_SAR_NSN.NSN_ID WHERE (((SAR2.ID)=$uid))";

Я не очень знаком с Access и даже менее знаком с использованием Access с PHP, поэтому этот небольшой проект был «забавным» (если не сказать больше) из-за отсутствия функций PHP (по сравнению с множеством доступных для MySQL).

Любая помощь будет принята с благодарностью, и рабочее решение поможет вам получить 50% моих мирских товаров (что может быть большим долгом, поэтому вы можете отказаться, если хотите). 🙂

1

Решение

Как вы, вероятно, обнаружили, Access SQL не имеет агрегатной функции, как MySQL GROUP_CONCAT (). Итак, ваш PHP-код должен создать список дочерних элементов, используя второе подготовленное выражение и внутренний цикл, например:

<?php
header('Content-Type: text/html; charset=windows-1252');
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252" />
<title>PDO example</title>
</head>
<body>
<?php
$connStr =
'odbc:' .
'Driver={Microsoft Access Driver (*.mdb)};' .
'Dbq=C:\\Users\\Public\\__SO\\28502544.mdb;' .
'Uid=Admin;';
$db = new PDO($connStr);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$sqlParent = "SELECT ID, ParentName FROM Parent";
$psParent = $db->prepare($sqlParent);

$sqlChild = "SELECT ChildName FROM Child WHERE ParentID = ?";
$psChild = $db->prepare($sqlChild);
$psChild->bindParam(1, $parentID, PDO::PARAM_INT);

echo '<table border=1>';
$psParent->execute();
while ($rowParent = $psParent->fetch()) {
echo '<tr>';
echo '<td>';
echo $rowParent["ParentName"];
echo '</td>';
// collect child items into array
$parentID = $rowParent["ID"];
$psChild->execute();
$childItems = array();
while ($rowChild = $psChild->fetch()) {
$childItems[] = $rowChild["ChildName"];
}
// string together and insert into table cell
echo '<td>';
echo implode(", ", $childItems);
echo '</td>';
echo '</tr>';
}
echo '</table>';
?>
</body>
</html>
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]