2017-07-19 83 views
0

我有麻烦了。 我有一个SQL表格,其中包含最终确定,关闭,取消和正在处理的流程,这些流程也与区域(人才,外包,数字等)相关联。 我想根据进程状态来计算AVG的总面积。 ,所以我有:PHP SQL除以零警告但不为零

$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

'mysqli_fetch_assoc($ tiempoQueryFinalizados)['finalizados']'为null或零。 – Ian

+0

有时候,但仍然是0/2 = 0 – UnsignedFoo

+0

您希望该查询返回多少行? – RiggsFolly

回答

2

这是一个获取数组返回并不是一个简单的除法

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

mysqli_fetch_assoc()每个呼叫从自己的ResultSet获得一个新行。因为查询只返回一行,第二次调用将返回等于零的FALSE。

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

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

好吧,我忘了,当每一个电话你做mysqli_fetch*你跳到下一个寄存器,所以只有我需要编辑

$tiempoQueryFinalizados = mysqli_query(...

通过

$tiempoQueryFinalizados = mysqli_fetch_assoc(mysqli_query(...

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

作品非常好:) 谢谢大家!