hola a todos, el dia de hoy estoy bastante desesperado ya que no le encuentro la solucion al siguiente problema.
Tengo una serie de datos los cuales tienen hijos y estos hijos a su vez tiene hijos lo cual para traerlos tengo una funcion recursiva. Ya tengo todos los datos que necesito, pero es necesario multiplicar la cantidad del padre por la cantidad del hijo(si es que tiene) y si el hijo tiene su propio hijo debe multipicarse la cantidad que ya teniamos por la de este hijo. Por desgracia, no como hacer para comparar y multiplicarlo de la forma correcta.
Por favor alguien que me ayude, es urgente. Gracias.
Muestro el codigo que uso para la extracion de los datos y la muestra de ellos:
$db2->query("select count(*)as count from formula_mp where formula_mp.id_mp_padre=$id_materia_prima");
if($db2->next_record()){
$hijos=$db2->f("count");
}
if($hijos>0){
$db2->query("select formula_mp.desperdicio,formula_mp.cantidad,tipo_ma teria_prima.codigo_tipo_materia_prima,tipo_materia _prima.id_tipo_materia_prima,formula_mp.id_materia _prima,materia_prima.codigo_materia_prima,materia_ prima.descripcion_materia_prima,materia_prima.cost o_unitario,materia_prima.id_nacionalidad,materia_p rima.unidad_equivalente_variable,materia_prima.uni dad_equivalente_fija,unidad_de_medida.descripcion, tipo_materia_prima.descripcion_tipo_materia_prima
from formula_mp
inner join materia_prima on materia_prima.id_materia_prima=formula_mp.id_mater ia_prima
inner join tipo_materia_prima on materia_prima.id_tipo_materia_prima=tipo_materia_p rima.id_tipo_materia_prima
inner join unidad_de_medida on unidad_de_medida.id_unidad_medida=materia_prima.id _unidad_medida
where formula_mp.id_mp_padre=$id_materia_prima");
$k=0;
$cantidad_total=0;
while($db2->next_record())
{
$id_tipo_materia_prima=$db2->f("id_tipo_materia_prima");
$id_materia_prima=$db2->f("id_materia_prima");
$codigo_materia=$db2->f("codigo_materia_prima");
$descripcion=$db2->f("descripcion_tipo_materia_prima");
$costo_mp=$db2->f("costo_unitario");
$descripcion_mat_prima=$db2->f("descripcion_materia_prima");
$codigo_materia_prima=$db2->f("codigo_materia_prima");
$codigo_tipo_materia_prima=$db2->f("codigo_tipo_materia_prima");
$id_nacionalidad=$db2->f("id_nacionalidad");
$cantidad=$db2->f("cantidad");
$desperdicio=$db2->f("desperdicio");
$unidad_variable=$db2->f("unidad_equivalente_variable");
$unidad_fija=$db2->f("unidad_equivalente_fija");
$total_desperdicio=($desperdicio/100)+1;
$numero_cantidad=$cantidad*$total_desperdicio;
$calculo_cantidad=$numero_cantidad*$cantidad_bater ia;
$db3->query("select * from formula_mp where formula_mp.id_materia_prima=$id_materia_prima and id_mp_padre=$padre_materia");
if($db3->next_record()){
$cantidad_materia=$db3->f("cantidad");
}
for($i=0;$i<count($datos);$i++){
$cantidad_total=$cantidad*$datos[$i][2];
}
$db6->query("select * from materia_departamentos where id_materia_prima=$id_materia_prima");
while($db6->next_record()){
$designacion=$db6->f("departamento");
$costo_variable=$unidad_variable*$calculo_cantidad ;
$costo_fijo=$unidad_fija*$calculo_cantidad;
cantidad total: $cantidad_total";
$banderaarrg=false;
for($i=0;$i<count($datos);$i++){
if($datos[$i][0]==$designacion){
$datos[$i][2]+=$cantidad_total;
$banderaarrg=true;
}
}
if($banderaarrg==false){
if($designacion==""){
}else{
array_push($datos,array($designacion,$descripcion_ mat_prima,$cantidad,$calculo_cantidad,$padre_mater ia));
//print_r($datos);
}
}
}
$db3->query("select count(*)as count from formula_mp where formula_mp.id_mp_padre=$id_materia_prima");
if($db3->next_record()){
$hijos=$db3->f("count");
}
if($hijos>0){
$datos=oreo($id_materia_prima,$datos);
}
$k++;
}
He borrado los echos para que el codigo se entienda un poquito, esta es la muestra de los datos:
padre: 12 -
select * from formula_mp where formula_mp.id_materia_prima=151 and id_mp_padre=12---padre_ve: 12---***cantidad padre: 1****--Hijo: 151 cantidad hijo: 1 cantidad total: 1
padre: 151 -
select * from formula_mp where formula_mp.id_materia_prima=220 and id_mp_padre=151---padre_ve: 12---***cantidad padre: 1****--Hijo: 220 cantidad hijo: 1 cantidad total: 1
select * from formula_mp where formula_mp.id_materia_prima=257 and id_mp_padre=151---padre_ve: 12---***cantidad padre: 1****--Hijo: 257 cantidad hijo: 1 cantidad total: 1
select * from formula_mp where formula_mp.id_materia_prima=252 and id_mp_padre=151---padre_ve: 12---***cantidad padre: 1****--Hijo: 252 cantidad hijo: 1 cantidad total: 1
select * from formula_mp where formula_mp.id_materia_prima=189 and id_mp_padre=12---padre_ve: 12---***cantidad padre: 1****--Hijo: 189 cantidad hijo: 1.041 cantidad total: 1.041
padre: 189 -
select * from formula_mp where formula_mp.id_materia_prima=2 and id_mp_padre=189---padre_ve: 12---***cantidad padre: 1****---padre_ve: 12---***cantidad padre: 1.041****--Hijo: 2 cantidad hijo: 0.001423 cantidad total: 0.001481343
select * from formula_mp where formula_mp.id_materia_prima=3 and id_mp_padre=189---padre_ve: 12---***cantidad padre: 1****---padre_ve: 12---***cantidad padre: 1.041****--Hijo: 3 cantidad hijo: 0.001169 cantidad total: 0.001216929
select * from formula_mp where formula_mp.id_materia_prima=8 and id_mp_padre=189---padre_ve: 12---***cantidad padre: 1****---padre_ve: 12---***cantidad padre: 1.041****--Hijo: 8 cantidad hijo: 0.001818 cantidad total: 0.001892538
select * from formula_mp where formula_mp.id_materia_prima=11 and id_mp_padre=189---padre_ve: 12---***cantidad padre: 1****---padre_ve: 12---***cantidad padre: 1.041****--Hijo: 11 cantidad hijo: 0.000193 cantidad total: 0.000200913
select * from formula_mp where formula_mp.id_materia_prima=195 and id_mp_padre=189---padre_ve: 12---***cantidad padre: 1****---padre_ve: 12---***cantidad padre: 1.041****--Hijo: 195 cantidad hijo: 0.805782365894 cantidad total: 0.838819442896