0

我有一个产品主控,其中有 2 个字段,一个用于主产品(字段名称为“下”),第二个用于子产品(字段名称为“Prod_desc”)我想要的是一个嵌套循环,我可以在其中捕获所有代码(字段名称为 Cylno)来自事务表 (ECR_CBDC)。

我有 2 个嵌套循环,第一个 while 循环用于 PRODUCT_MASTER,其中根据用户对主产品的选择选择子产品,第二个循环用于收集所有子产品的代码。

现在的问题是它只收集 1 个值,因为 FOR 循环会覆盖以前的值。是否有任何其他循环可以保存每个子产品的先前值。

$p=mysql_query("SELECT * FROM PRODMAST WHERE Under='$product'");
while ($p2=mysql_fetch_assoc($p))
{
    $prodesc=$p2['Prod_desc'];

    $dc=mysql_query("SELECT * FROM ECR_CBDC WHERE Prod_desc='$prodesc'  AND usr='$user'");
    $num_rows = mysql_num_rows($dc);
    $fill_from_array = array(); /* as "value"=>"option" */
    for($i = 1; $i <= $num_rows; $i++)
    {
        $row = mysql_fetch_assoc($dc);
        $fill_from_array[$row['Cylno']] = $row['Cylno'];
    }
}
4

2 回答 2

1

如果我明白你在问什么 - $fill_from_array 只收集一行的价值 - 我认为你需要在第一个循环之外定义 $fill_from_array ,所以......

$p=mysql_query("SELECT * FROM PRODMAST WHERE Under='$product'");
$fill_from_array = array(); /* as "value"=>"option" */
while ($p2=mysql_fetch_assoc($p))
{
    $prodesc=$p2['Prod_desc'];

    $dc=mysql_query("SELECT * FROM ECR_CBDC WHERE Prod_desc='$prodesc'  AND usr='$user'");
    $num_rows = mysql_num_rows($dc);
    for($i = 1; $i <= $num_rows; $i++)
    {
        $row = mysql_fetch_assoc($dc);
        $fill_from_array[$row['Cylno']] = $row['Cylno'];
    }
}

这样,每次 while() 循环循环时都不会覆盖 $fill_from_array 。你是这个意思吗?

于 2012-11-15T09:47:23.540 回答
1

不要在代码中模拟连接,而是使用JOIN语法来减少循环和数据传输的数量:

SELECT * FROM PRODMAST 
INNER JOIN ECR_CBDC ON PRODMAST.Prod_desc=ECR_CBDC.Prod_desc AND usr='$user'
WHERE Under='$product'
于 2012-11-15T09:59:59.167 回答