Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用mysql删除嵌套循环_Php_Mysql - Fatal编程技术网

Php 如何使用mysql删除嵌套循环

Php 如何使用mysql删除嵌套循环,php,mysql,Php,Mysql,我试着改成这个,但结果不一样: $sqlcmd = "SELECT * FROM inventory WHERE category='$category'"; $temp = mysql_query($sqlcmd); while ( $value = mysql_fetch_array($temp) ) { $sqlcmd = "SELECT SUM(quantity) AS pending FROM withdrawals WHERE

我试着改成这个,但结果不一样:

$sqlcmd = "SELECT * FROM inventory WHERE category='$category'";
$temp = mysql_query($sqlcmd);
while ( $value = mysql_fetch_array($temp) ) {
  $sqlcmd = "SELECT SUM(quantity) AS pending 
            FROM withdrawals 
            WHERE item_code='$value[item_code]' 
            AND withdraw_number IN ( 
                SELECT withdraw_number 
                FROM withdrawal_number 
                WHERE is_dispatched=0 AND (series_type='DC' OR series_type='D') )";
  $temp2 = mysql_query($sqlcmd);
  $value2 = mysql_fetch_array($temp2);
}
您在第二个查询中缺少序列类型检查。如果你想得到零和,你需要使用左连接

而且您不应该在GROUP BY中包含RECUN_number,因为您在原始查询中没有按该编号分组,它只是用于筛选

$sqlcmd = "SELECT i.item_code, i.item_category, i.item_description, i.quantity, i.reorder_point, SUM(w.quantity) AS pending 
            FROM inventory i, withdrawals w, withdrawal_number wn 
            WHERE i.item_code=w.item_code 
            AND w.withdraw_number=wn.withdraw_number 
            AND i.category='Store' 
            AND wn.is_dispatched=0 
            GROUP BY i.item_code, wn.withdraw_number";
$temp = mysql_query($sqlcmd);
while ( $value = mysql_fetch_array($temp) ) {
}
在最里面的子查询中需要SELECT DISTINCT,以防止总和乘以具有相同取款编号的行数


您还应该停止使用mysql_*函数。它们已被弃用多年,并在PHP7中完全删除。您应该使用mysqli或PDO,并使用带参数的准备语句,而不是将变量替换到SQL中。

学习使用ANSI连接语法而不是交叉乘积。您在第二个查询中缺少series_类型条件。你有i.category='Store'而不是i.category='$category'。如果你想为没有取款的项目得到零和,你还需要使用LEFT JOIN。我一直在出错。我使用的是MySQL 5.0.24a,可能不支持左连接?我忘记了其中一个子查询的别名。是否每个派生表都必须有别名?
$sqlcmd = "SELECT i.*, IFNULL(pending, 0) AS pending 
        FROM inventory i
        LEFT JOIN (
            SELECT item_code, SUM(pending) AS pending
            FROM withdrawals w
            JOIN (SELECT DISTINCT withdraw_number
                  FROM withdrawal_number 
                  WHERE dispatched = 0 AND series_type IN ('DC', 'D')
            ) AS wn ON w.withdraw_number=wn.withdraw_number
            GROUP BY item_code
        ) AS w ON i.item_code=w.item_code 
        WHERE i.category='$category'";