第一个for循环是检索$projSDE_1
,它是员工ID,它是一个值,它在每个循环中都会改变。
$projSDE_1_IDs = [];
for($i=0; $i<db_rowcount();$i++)//1st for
{
$projSDE_1=db_get($i,8);
array_push($projSDE_1_IDs,$projSDE_1);
}
$projSDE_1_names = func_GetEmpNameNew($projSDE_1_IDs,$projSDE_1);
接下来,第二个for循环将检索所有数据并显示它。我需要的是每一行将能够通过$projSDE_1_names
显示func_GetEmpNameNew($projSDE_1_IDs,$projSDE_1);
for($j=0; $j<db_rowcount();$j++)//2nd for
{
<tr >
<tbody>
<td style='width:5%'>".$no.". </a></td>
<td>".$projID." </td>
<td>".$projClient." </td>";
<td>".$projSDE_1_names." </td>";
</tbody>
</tr>
}//endfor
获取$projSDE_1_names
的功能
function func_GetEmpNameNew($empIDs) {
$names = [];
foreach($empIDs as $empID){
$sqlEmp="select EmpID,LastName2_c from empbasic WHERE EmpID= '".$empID."'";
db_select($sqlEmp);
$rowcount=db_rowcount();
if(db_rowcount()>0){
for($f=0;$f<count($empIDs);$f++){
$empID=db_get($f,0);
$empName=db_get($f,1);
array_push($names, $empName);
}//for
}//if
}//foreach
return $names;
} // function
var_dump($projSDE_1_names); // Display the array to see if you get all the correct data.
该函数运行良好,并且能够返回带有员工姓名的数组。var_dump($projSDE_1_names);
到目前为止,这是我得到的结果-Result。
顶部显示的姓名列表是
foreach ($projSDE_1_names as $projSDE_1_name) {
echo $projSDE_1_name.'-';
}
我需要为每行输入每个名称。它列出了函数中的10个名称,并假定有10行。感谢所有帮助
答案 0 :(得分:0)
您正在尝试解决错误的问题。
从您的代码判断,从关系数据库中检索值的初始列表。随后的结果也从关系数据库中检索。
仅此一项是非常错误的(除非我们正在谈论无法直接通信的2个单独的DBMS实例)。检索2组数据的正确方法是对数据使用JOIN。
但这不是代码中唯一的咆哮声。
在循环中反复生成和执行select语句是非常不好的做法。这可以通过与上述第一个问题相同的方法解决。但是,如果参考数据集不是源自同一关系DBMS,则有更好的方法来解决该问题。我会提出一个建议,但是您代码中的db_函数不是标准的PHP函数。您的代码中公开的行为似乎是一个非常繁琐且具有局限性的接口。使用mysqli,您可以简单地...。
function func_GetEmpNameNew($empIDs) {
global $db_handle;
$sqlEmp="select EmpID,LastName2_c from empbasic WHERE EmpID IN ("
. implode(",", $empID) // assuming the inputs are trusted and integer values
")";
$res=mysqli_query($db_handle, $sqlEmp);
return mysqli_fetch_all($res, MYSQLI_ASSOC);
}
作为旁注,您将使用顺序查询中返回数据的顺序作为对结果集建立索引的方式。只要您每次检索一行,数据就会匹配-但您的代码每次可能检索零行,一次或多于一行-同样,解决方案是使用联接运行一个查询。如果您需要针对过分的数据源运行查询,请使用原始数据集中的主键属性为数组建立索引。