在 PHP 中使用嵌套 while 循环时结果重复
Results Repeat When Using Nested while Loops in PHP
我正在使用 PHP 开发 API,其结果为 JSON。问题是结果在每个数组中重复。如果您检查 Here.
,您将更好地理解我要说的内容
这是我的代码:
<?php
function requiredData()
{
$db = $this->dbConnection();
//$sql = "SELECT * FROM projects JOIN project_details ON projects.project_id=project_details.project_id";
$sql = "SELECT * FROM projects LIMIT 10";
//$sql = "SELECT * FROM projects,project_details WHERE projects.project_id=project_details .project_id";
$queryResult = $db->query($sql);
if ($queryResult->num_rows > 0)
{
while ($row = $queryResult->fetch_assoc())
{
$pid = $row['project_id'];
$detailsql = "SELECT * FROM project_details WHERE project_id=$pid LIMIT 10";
$sqlResult = $db->query($detailsql);
if ($sqlResult->num_rows > 0)
{
while ($d = $sqlResult->fetch_assoc())
{
$r[] = array(
"project_id" => $d['project_id'],
"project_detail" => array(
"work_done" => $d['project_detail'],
"payment_status" => $d['project_payment_status'],
"detail_id" => $d['project_detail_id']
)
);
}
}
$results[$row['project_name']] = array(
"project_id" => $row["project_id"],
"project_start_date" => $row["project_start_date"],
"project_due_date" => $row["project_due_date"],
"project_currency" => $row["project_currency"],
"project_work_details" => $r
);
}
}
return $results;
}
这可能真的 对您没有帮助,但我可能会更改您的代码以使用 JOIN 而不是嵌套查询。
显然,您应该根据要返回的数据、方式和时间选择 RIGHT、LEFT、INNER 或 OUTER 联接。但是在不了解你的项目的情况下......这就是我会做的。将递归、关联和繁重的工作留给数据库引擎。这就是它的工作。
$sql = "SELECT * FROM projects p INNER JOIN project_details d ON p.ID=d.project_id WHERE p.ID={$pid}";
$res = mysql_query($sql);
if ($res) {
while ($row = mysql_fetch_array($res)) {
/* Handle row processing using $row['column'] */
}
}
我对代码做了一些调整并开始工作...这是我的代码...如果有人遇到同样的问题,他们可以将我的代码作为参考。
function requiredData() {
$db = $this->dbConnection();
//$sql = "SELECT * FROM projects JOIN project_details ON projects.project_id=project_details.project_id";
$sql = "SELECT * FROM projects LIMIT 10";
//$sql = "SELECT * FROM projects,project_details WHERE projects.project_id=project_details .project_id";
$queryResult = $db->query($sql);
if ($queryResult->num_rows > 0) {
$results = array();
while ($row = $queryResult->fetch_assoc()) {
$pid = $row['project_id'];
//$detailsql = "SELECT * FROM projects p INNER JOIN project_details d ON p.project_id=d.project_id WHERE p.project_id={$pid} LIMIT 10";
$detailsql = "SELECT * FROM project_details WHERE project_id = $pid";
$sqlResult = $db->query($detailsql);
$results[$pid] = array(
"project_name" => $row['project_name'],
"project_id" => $row["project_id"],
"project_start_date" => $row["project_start_date"],
"project_due_date" => $row["project_due_date"],
"project_currency" => $row["project_currency"],
"project_details" => array()
);
if ($sqlResult->num_rows > 0) {
while ($d = $sqlResult->fetch_assoc()) {
$results[$pid]['project_details'][] = array(
"project_detail" => array(
"detail_id" => $d['project_detail_id'],
"work_done" => $d['project_detail'],
"work_payment" => $d['project_payment'],
"payment_status" => $d['project_payment_status']
)
);
}
}
}
}
return $results;
}
我正在使用 PHP 开发 API,其结果为 JSON。问题是结果在每个数组中重复。如果您检查 Here.
,您将更好地理解我要说的内容这是我的代码:
<?php
function requiredData()
{
$db = $this->dbConnection();
//$sql = "SELECT * FROM projects JOIN project_details ON projects.project_id=project_details.project_id";
$sql = "SELECT * FROM projects LIMIT 10";
//$sql = "SELECT * FROM projects,project_details WHERE projects.project_id=project_details .project_id";
$queryResult = $db->query($sql);
if ($queryResult->num_rows > 0)
{
while ($row = $queryResult->fetch_assoc())
{
$pid = $row['project_id'];
$detailsql = "SELECT * FROM project_details WHERE project_id=$pid LIMIT 10";
$sqlResult = $db->query($detailsql);
if ($sqlResult->num_rows > 0)
{
while ($d = $sqlResult->fetch_assoc())
{
$r[] = array(
"project_id" => $d['project_id'],
"project_detail" => array(
"work_done" => $d['project_detail'],
"payment_status" => $d['project_payment_status'],
"detail_id" => $d['project_detail_id']
)
);
}
}
$results[$row['project_name']] = array(
"project_id" => $row["project_id"],
"project_start_date" => $row["project_start_date"],
"project_due_date" => $row["project_due_date"],
"project_currency" => $row["project_currency"],
"project_work_details" => $r
);
}
}
return $results;
}
这可能真的 对您没有帮助,但我可能会更改您的代码以使用 JOIN 而不是嵌套查询。
显然,您应该根据要返回的数据、方式和时间选择 RIGHT、LEFT、INNER 或 OUTER 联接。但是在不了解你的项目的情况下......这就是我会做的。将递归、关联和繁重的工作留给数据库引擎。这就是它的工作。
$sql = "SELECT * FROM projects p INNER JOIN project_details d ON p.ID=d.project_id WHERE p.ID={$pid}";
$res = mysql_query($sql);
if ($res) {
while ($row = mysql_fetch_array($res)) {
/* Handle row processing using $row['column'] */
}
}
我对代码做了一些调整并开始工作...这是我的代码...如果有人遇到同样的问题,他们可以将我的代码作为参考。
function requiredData() {
$db = $this->dbConnection();
//$sql = "SELECT * FROM projects JOIN project_details ON projects.project_id=project_details.project_id";
$sql = "SELECT * FROM projects LIMIT 10";
//$sql = "SELECT * FROM projects,project_details WHERE projects.project_id=project_details .project_id";
$queryResult = $db->query($sql);
if ($queryResult->num_rows > 0) {
$results = array();
while ($row = $queryResult->fetch_assoc()) {
$pid = $row['project_id'];
//$detailsql = "SELECT * FROM projects p INNER JOIN project_details d ON p.project_id=d.project_id WHERE p.project_id={$pid} LIMIT 10";
$detailsql = "SELECT * FROM project_details WHERE project_id = $pid";
$sqlResult = $db->query($detailsql);
$results[$pid] = array(
"project_name" => $row['project_name'],
"project_id" => $row["project_id"],
"project_start_date" => $row["project_start_date"],
"project_due_date" => $row["project_due_date"],
"project_currency" => $row["project_currency"],
"project_details" => array()
);
if ($sqlResult->num_rows > 0) {
while ($d = $sqlResult->fetch_assoc()) {
$results[$pid]['project_details'][] = array(
"project_detail" => array(
"detail_id" => $d['project_detail_id'],
"work_done" => $d['project_detail'],
"work_payment" => $d['project_payment'],
"payment_status" => $d['project_payment_status']
)
);
}
}
}
}
return $results;
}