我有一个产品母版,其中我有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'];
}
}
答案 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'