php while和for循环来填充数组不起作用

时间:2012-11-15 09:41:04

标签: php mysql loops while-loop nested

我有一个产品母版,其中我有2个字段,一个用于主要产品(字段名称为“Under”),SECOND用于子产品(字段名称为“Prod_desc”) 我想要的是一个嵌套循环,我从事务表(ECR_CBDC)中捕获所有代码(字段名称为Cylno)。

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

现在的问题是它只收集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'];
    }
}

2 个答案:

答案 0 :(得分: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。这是你的意思吗?

答案 1 :(得分:1)

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

SELECT * FROM PRODMAST 
INNER JOIN ECR_CBDC ON PRODMAST.Prod_desc=ECR_CBDC.Prod_desc AND usr='$user'
WHERE Under='$product'
相关问题