2013-01-31 63 views
0

是/这个代码有问题吗?在while循环中查询

while($qtytoAdd > 0) { 
    if(($remBalance - $qtytoAdd) >= 0) { 
     mysql_query('UPDATE `estimates` SET `qty_rec` = `qty_rec` + "'.$qtytoAdd.'" WHERE `proj_id` = "'.$proj_id.'" AND `mat_id` = "'.mat_id_from_mat_desc($materials).'" AND `est_id` = "'.$balid.'"'); 
     mysql_query('UPDATE `requestdetails` SET `current_rec_qty` = `current_rec_qty` + "'.$qtytoAdd.'" WHERE `proj_id` = "'.$proj_id.'" AND `mat_id` = "'.mat_id_from_mat_desc($materials).'" AND `req_id` = "'.$currid.'"'); 
    } else { 
     mysql_query('UPDATE `estimates` SET `qty_rec` = "'.$remBalance.'" + "'.$currRec.'" WHERE `proj_id` = "'.$proj_id.'" AND `mat_id` = "'.mat_id_from_mat_desc($materials).'" AND `est_id` = "'.$balid.'"'); 
     mysql_query('UPDATE `requestdetails` SET `current_rec_qty` = "'.$remBalance.'" + "'.$currRec.'" WHERE `proj_id` = "'.$proj_id.'" AND `mat_id` = "'.mat_id_from_mat_desc($materials).'" AND `req_id` = "'.$currid.'"'); 
     $qtytoAdd = $qtytoAdd - $remBalance; 
    } 
    return $qtytoAdd; 
} 

这两个条件似乎是工作,但在那里我会指定新的值$qtytoAdd的部分不是。我是否需要使用返回函数让它继续循环。我是新手。请帮忙。

foreach($mat_desc as $mat_key => $materials){ 
    $qtytoAdd = $rec_qty[$mat_key]; 
    $remBalance = mysql_result(mysql_query('SELECT `est_qty` - `qty_rec` as balance FROM `estimates` WHERE `proj_id` = "'.$proj_id.'" AND `mat_id` = "'.mat_id_from_mat_desc($materials).'" AND `qty_rec` <> `est_qty` ORDER BY `item_id` ASC'), 0); 
    $balid = mysql_result(mysql_query('SELECT `est_id` FROM `estimates` WHERE `proj_id` = "'.$proj_id.'" AND `mat_id` = "'.mat_id_from_mat_desc($materials).'" AND `qty_rec` <> `est_qty` ORDER BY `item_id` ASC'), 0); 
    $currRec = mysql_result(mysql_query('SELECT `qty_rec` FROM `estimates` WHERE `proj_id` = "'.$proj_id.'" AND `mat_id` = "'.mat_id_from_mat_desc($materials).'" AND `qty_rec` <> `est_qty`'), 0); 
    $currid = mysql_result(mysql_query('SELECT `req_id` FROM `requestdetails` JOIN `request` USING(`req_id`) WHERE `proj_id` = "'.$proj_id.'" AND `mat_id` = "'.mat_id_from_mat_desc($materials).'" AND `req_qty` <> `current_rec_qty` ORDER BY `req_id` ASC'), 0); 

    mysql_query('INSERT INTO `receivedetails` (`rec_id`,`mat_id`,`rec_qty`) VALUES ('.$rec_id.','.mat_id_from_mat_desc($materials).','.$qtytoAdd.')'); 

    while($qtytoAdd > 0) { 
     if(($remBalance - $qtytoAdd) >= 0) { 
      mysql_query('UPDATE `estimates` SET `qty_rec` = `qty_rec` + "'.$qtytoAdd.'" WHERE `proj_id` = "'.$proj_id.'" AND `mat_id` = "'.mat_id_from_mat_desc($materials).'" AND `est_id` = "'.$balid.'"'); 
      mysql_query('UPDATE `requestdetails` SET `current_rec_qty` = `current_rec_qty` + "'.$qtytoAdd.'" WHERE `proj_id` = "'.$proj_id.'" AND `mat_id` = "'.mat_id_from_mat_desc($materials).'" AND `req_id` = "'.$currid.'"'); 
      $qtytoAdd = 0; 
     } else { 
      mysql_query('UPDATE `estimates` SET `qty_rec` = "'.$remBalance.'" + "'.$currRec.'" WHERE `proj_id` = "'.$proj_id.'" AND `mat_id` = "'.mat_id_from_mat_desc($materials).'" AND `est_id` = "'.$balid.'"'); 
      mysql_query('UPDATE `requestdetails` SET `current_rec_qty` = "'.$remBalance.'" + "'.$currRec.'" WHERE `proj_id` = "'.$proj_id.'" AND `mat_id` = "'.mat_id_from_mat_desc($materials).'" AND `req_id` = "'.$currid.'"'); 
      $qtytoAdd = $qtytoAdd - $remBalance; 
     } 
    } 

    mysql_query('UPDATE `estimates` SET `qty_onhand` = `qty_rec` - `qty_rel` WHERE `proj_id` = '.$proj_id.' AND `qty_rec` <> `est_qty` AND `mat_id` = '.mat_id_from_mat_desc($materials).' AND `est_id` = '.$balid.''); 
} 

这实际上是整个代码。 :]

+2

'return'将结束你所在的任何函数 - 它不用于控制循环。这个循环的其余部分是什么? – Crontab

+3

提示股票评论AVOID'mysql_query' ....它被弃用 – Smandoli

+0

@Crontab,但每当我删除'返回'我正在更新的表越来越乱了。 – chris

回答

1

做我需要使用返回功能,让它继续循环

您不必返回继续循环。当您想从当前功能返回并返回时使用return

如果在一个函数中调用return语句,将立即 结束当前函数的执行,并返回其参数为 函数调用的值。 return还将结束执行 的eval()语句或脚本文件。

PHP &查询

while($qtytoAdd > 0) { 
    if(($remBalance - $qtytoAdd) >= 0) { 
     mysql_query('UPDATE `estimates` SET `qty_rec` = `qty_rec` + "'.$qtytoAdd.'" WHERE `proj_id` = "'.$proj_id.'" AND `mat_id` = "'.mat_id_from_mat_desc($materials).'" AND `est_id` = "'.$balid.'"'); 
     mysql_query('UPDATE `requestdetails` SET `current_rec_qty` = `current_rec_qty` + "'.$qtytoAdd.'" WHERE `proj_id` = "'.$proj_id.'" AND `mat_id` = "'.mat_id_from_mat_desc($materials).'" AND `req_id` = "'.$currid.'"'); 
     $qtytoAdd = $qtytoAdd - $remBalance; // this part does not exist in your code. 
     ^^^^^^^^^^^^^^^^^^^^^^-------- depends on your requirement. I added the same line. 
} else { 
     mysql_query('UPDATE `estimates` SET `qty_rec` = "'.$remBalance.'" + "'.$currRec.'" WHERE `proj_id` = "'.$proj_id.'" AND `mat_id` = "'.mat_id_from_mat_desc($materials).'" AND `est_id` = "'.$balid.'"'); 
     mysql_query('UPDATE `requestdetails` SET `current_rec_qty` = "'.$remBalance.'" + "'.$currRec.'" WHERE `proj_id` = "'.$proj_id.'" AND `mat_id` = "'.mat_id_from_mat_desc($materials).'" AND `req_id` = "'.$currid.'"'); 
     $qtytoAdd = $qtytoAdd - $remBalance; 
    } 
} 

在那里你出了错

根据你的代码,如果,如果是真的第一次不进行更改$ qtytoAdd。另外你从功能返回。所以while循环只会执行一次。

+0

如果'$ qtytoAdd'重新分配行是相同的,它应该放在'while'内部的条件之外(而不是在条件的两个块中重复)。 – Crontab

+0

我确定它是一样的。我刚刚添加它指出 – Techie

+0

@Crontab,谢谢指出。 :] – chris