0

私は2つのフィールドを持つ製品マスターを持っています.1つはメイン製品用(フィールド名は「Under」)で、2番目はサブ製品用です(フィールド名は「Prod_desc」です) (フィールド名は Cylno) トランザクション テーブル (ECR_CBDC) から。

私は2つのネストされたループを持っています。最初のループはPRODUCT_MASTER用で、メイン製品のユーザー選択に基づいてサブ製品が選択され、2番目のループはすべてのサブ製品のコードを収集するためのものです。

ここでの問題は、FOR ループが前の値を上書きするため、値が 1 つしか収集されないことです。各サブプロダクトの以前の値を保持できる他のループはありますか?

$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

コードで結合をエミュレートする代わりに、次の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 に答える
1

あなたが何を求めているのか理解できれば- $fill_from_array は1行分の価値しか収集しません-最初のループの外で $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 に答える