Holas, he creado un algoritmo pero todavía no se porqué no me da resultado.
Código PHP:
Ver original<?php
require_once '../../../config/mysql.php';
$dbCon = Conectarse();
// Capturamos los valores con $_GET[]
$productor = $_GET['productor']; //Ej. : Agricola Saenz
$especie = $_GET['especie']; //Ej. : Ciruela
$variedad = $_GET['variedad']; //Ej. : Angeleno
$etapa = $_GET['etapa']; //Ej. : 2
$calibre = $_GET['calibre']; //Ej. : 36
$porcentualReal = $_GET['porcentualReal']; //El Porcentaje de este calibre 36 es 1.9, esta variable guarda : 1.12
$porcentual = $_GET['campoPorcentual']; //Lo que el usuario a ingresado en la casilla porcentual, Ej: 70.
// Actualizamos el valor porcentual con el valor que el usuario a ingresado.
mysql_query("UPDATE criterio_calibres SET valor_porcentual = $porcentual WHERE CONVERT(`criterio_calibres`.`id_especie` USING utf8) = '$especie' AND CONVERT(`criterio_calibres`.`id_productor` USING utf8) = '$productor' AND CONVERT(`criterio_calibres`.`id_variedad` USING utf8) = '$variedad' AND `criterio_calibres`.`etapa` = $etapa AND `criterio_calibres`.`id_calibre` = $calibre LIMIT 1", $dbCon)or
die(mysql_error());
// Sumamos la cantidad de valores porcentuales en total.
$queryCriterioCalibre = mysql_query("SELECT SUM(valor_porcentual) as suma FROM criterio_calibres WHERE id_productor = '$productor' AND id_especie = '$especie' AND id_variedad = '$variedad' AND etapa = $etapa", $dbCon); $Suma = round($resultadoPorcentual['suma'],0); //Ej: $Suma = 162
if($Suma > 100){
$Salir = 0;
$Numerador = ($Suma - 100);
$Delta = 0;
$Cero = 0; //Consultamos en MySQL sobre un porcentual mayor a cero.
// Recuperamos la cantidad total de columnas, menos el valor porcentual que se ha modificado y las que tienen valor cero.
$Resultado = mysql_query("SELECT COUNT(valor_porcentual) AS Cantidad FROM criterio_calibres WHERE CONVERT(`criterio_calibres`.`id_especie` USING utf8) = '$especie' AND CONVERT(`criterio_calibres`.`id_productor` USING utf8) = '$productor' AND CONVERT(`criterio_calibres`.`id_variedad` USING utf8) = '$variedad' AND `criterio_calibres`.`etapa` = $etapa AND `criterio_calibres`.`id_calibre` != $calibre AND `criterio_calibres`.`valor_porcentual` != $porcentual AND `criterio_calibres`.`valor_porcentual` > $Cero", $dbCon)or
die(mysql_error()); $Denominador = $Columnas['Cantidad'];
//Ej: $Denominador = 15 (Me ha contado 15 columnas, menos la que se ha modificado)
while($Salir == 0){
$Consultamos = mysql_query("SELECT id_calibre, valor_porcentual FROM `criterio_calibres` WHERE CONVERT(`criterio_calibres`.`id_especie` USING utf8) = '$especie' AND CONVERT(`criterio_calibres`.`id_productor` USING utf8) = '$productor' AND CONVERT(`criterio_calibres`.`id_variedad` USING utf8) = '$variedad' AND `criterio_calibres`.`etapa` = $etapa AND `criterio_calibres`.`id_calibre` != $calibre AND `criterio_calibres`.`valor_porcentual` != $porcentual", $dbCon)or
die(mysql_error()); $valor_porcentual = $columnasValores['valor_porcentual'];
if($valor_porcentual > ($Numerador/$Denominador)){
$Porcentaje = $valor_porcentual-($Numerador/$Denominador);
mysql_query("UPDATE criterio_calibres SET valor_porcentual = $Porcentaje WHERE CONVERT(`criterio_calibres`.`id_especie` USING utf8) = '$especie' AND CONVERT(`criterio_calibres`.`id_productor` USING utf8) = '$productor' AND CONVERT(`criterio_calibres`.`id_variedad` USING utf8) = '$variedad' AND `criterio_calibres`.`etapa` = $etapa AND CONCAT(`criterio_calibres`.`valor_porcentual`) = $valor_porcentual LIMIT 1", $dbCon)or
die(mysql_error()); }else{
$Delta = $Delta + (($Numerador/$Denominador)-$valor_porcentual);
$Porcentaje = 0;
}
}
if($Delta == 0){
$Salir = 1;
}else{
$Numerador = $Delta;
$Delta = 0;
}
}
// Esto esta bien, está funcionando ok
}elseif($Suma <= 100){
$resultadoSumar = ($porcentualReal-$porcentual);
$resultadoDivisionSumar = ($resultadoSumar/$quantyColumnas);
$Consultamos = mysql_query("SELECT id_calibre, valor_porcentual FROM `criterio_calibres` WHERE CONVERT(`criterio_calibres`.`id_especie` USING utf8) = '$especie' AND CONVERT(`criterio_calibres`.`id_productor` USING utf8) = '$productor' AND CONVERT(`criterio_calibres`.`id_variedad` USING utf8) = '$variedad' AND `criterio_calibres`.`etapa` = $etapa AND `criterio_calibres`.`id_calibre` != $calibre AND `criterio_calibres`.`valor_porcentual` != $porcentual", $dbCon)or
die(mysql_error()); $id_calibre = $columnasValores['id_calibre'];
$valor_porcentual = $columnasValores['valor_porcentual'];
$resultadoSuma = $resultadoDivisionSumar + $valor_porcentual;
mysql_query("UPDATE criterio_calibres SET valor_porcentual = $resultadoSuma WHERE CONVERT(`criterio_calibres`.`id_especie` USING utf8) = '$especie' AND CONVERT(`criterio_calibres`.`id_productor` USING utf8) = '$productor' AND CONVERT(`criterio_calibres`.`id_variedad` USING utf8) = '$variedad' AND `criterio_calibres`.`etapa` = $etapa AND CONCAT(`criterio_calibres`.`valor_porcentual`) = $valor_porcentual LIMIT 1", $dbCon)or
die(mysql_error()); }
}
/* ++++++++++++++++++++ Fin +++++++++++++++++++++++*/