使用 php 中的 ID 根据查询输出输出不同的表



我正在尝试使用 PHP 和 MSSQL 根据结果 ID 在 PPH 中的每个"结果"下输出一个结果。 我已经在网上搜索并尽力输出结果,但当前代码在整个记录之后显示结果。

这会从表中选择所有人员并循环浏览他们,然后输出与"人员"下的人员相关的每种颜色 在下一个人之前

目前,代码在列出所有人后输出颜色。

<?php
$tsql = "SELECT * from dbo.dim_person";
$getResults_sbu_l = sqlsrv_query($conn_d, $tsql);
while ($person = sqlsrv_fetch_array($getResults_sbu_l,SQLSRV_FETCH_ASSOC)) 
{
$arraySbu[$person['Person_id']] = $person;
}
$tsql_acc = "SELECT * from dbo.dim_color";
$getResults_sbu_acc = sqlsrv_query($conn_d, $tsql_acc);
while ($color = sqlsrv_fetch_array($getResults_sbu_acc,SQLSRV_FETCH_ASSOC)) 
{
$arraySbu[$color['Person_id']]['color_id'][] = $color;
}
foreach($arraySbu AS $person)
{
echo  $person['person_name'] . "<br>";
foreach($person['color_id'] AS $color)
{
echo $color['color_name'] . "<br>";
}
}
?>

如果我正确理解了这个问题,下一个方法可能会有所帮助。没有必要执行两个单独的语句,将数据存储在数组中并使用循环输出存储在此数组中的数据。您可以尝试使用适当的JOINORDER BY执行单个语句。

<?php
// Statement. 
// Use LEFT (RIGHT) join if you want to include (exclude) persons without colors.
$tsql = "
SELECT p.person_name, c.color_name 
FROM  dbo.dim_person p
LEFT JOIN dbo.dim_color c ON p.person_id = c.person_id 
ORDER BY p.person_name, c.color_name
";
$result = sqlsrv_query($conn_d, $tsql);
if ($result === false ) {
echo "Error (sqlsrv_query): ".print_r(sqlsrv_errors(), true);
exit;
}
// Results
$person = '';
while ($row = sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC)) {
if ($person != $row['person_name']) {
$person = $row['person_name'];
echo $row['person_name']."<br>";
}
echo $row['color_name']."<br>";
}
// End
sqlsrv_free_stmt($result);
sqlsrv_close($conn_d);
?>

最新更新