PHP SQL除以零警告但不为零

时间:2017-07-19 08:00:16

标签: php mysqli

我遇到了麻烦。 我有一个SQL表,其中包含已完成,关闭,取消和处理的流程,这些流程也由一个区域(人才,外包,数字等)关联。 我希望按区域进行AVG,并根据进程的状态进行总计。 所以我有:

$tiempoQueryFinalizados = mysqli_query($con,
 "SELECT IFNULL(SUM(IFNULL(timestampdiff(DAY,fecha_creacion,IFNULL(fecha_cerrado,NOW())),0)),0) AS finalizados, 
    (Select count(id_proceso) from proceso where estado ='FINALIZADO' and fecha_cerrado is not null) as c 
  FROM proceso 
  WHERE estado = 'FINALIZADO' and fecha_cerrado IS NOT NULL and area ='".$rowArea['id_area']."' ");

然后我在PHP中使用了一个简单的除法

mysqli_fetch_assoc($tiempoQueryFinalizados)['finalizados'] / mysqli_fetch_assoc($tiempoQueryFinalizados)['c']

但我收到错误Warning: Division by zero,所以我检查是否为零,但它没有。在此示例mysqli_fetch_assoc($tiempoQueryFinalizados)['c'] = 2中,但仍计为0

请帮忙吗?

编辑:该区域由$areaQuery = mysqli_query($con,"SELECT * from area where id_area!=0");

的获取数组返回

2 个答案:

答案 0 :(得分:2)

这不是一个简单的划分

mysqli_fetch_assoc($tiempoQueryFinalizados)['finalizados'] / 
mysqli_fetch_assoc($tiempoQueryFinalizados)['c']

每次调用mysqli_fetch_assoc()都会从结果集中获取一个新行。因此查询只返回一行,第二次调用将返回FALSE,等于零。

所以这将是一种更好的检索和计算方法

$row = mysqli_fetch_assoc($tiempoQueryFinalizados);
$calc = $row['finalizados']] / $row['c'];

答案 1 :(得分:0)

好的,我忘记了当你对mysqli_fetch*进行每次通话时,你跳到下一个注册,所以我只需要编辑

$tiempoQueryFinalizados = mysqli_query(...

通过

$tiempoQueryFinalizados = mysqli_fetch_assoc(mysqli_query(...

现在 $tiempoQueryFinalizados['finalizados'] / $tiempoQueryFinalizados['c']

效果很好:) 谢谢大家!