Dentro del formulario, hay un desplegable llamado "Cerrador" que contiene un primer valor llamado "Todos" (con valor '555'), y el resto de valores son distintos "cerradores" cuyos valores son tipo texto.
La idea es que cuando envían el valor '555' (Todos), el SP busque todos los valores en el campo '080_acciones.cerrador', pudiendo existir en el mismo valores 'null', vacios '', o con un nombre definido. Para ello he incluido la condición:
Código SQL:
Ver original
IF ($m!='555') THEN SET $m2=$m; ELSE SET $m2='_%';END IF;
siendo $m, la variable in enviada y $m2, el valor a buscar en el SELECT.
Dentro del SELECT se encuentra la expresion "WHERE 080_acciones.cerrador like $m2 ".
Cuando $Ms (cerrador enviado) es uno definido, todo va ok; el problema es cuando se envía '555' (Todos) y la segunda para del IF de arriba (else SET $m2='_%';end if;) no obtiene TODOS los datos del campo '080_acciones.cerrador'.
Tengo dudas de si el enfoque que estoy realizando es el adecuado, o si podria hacerse de otro modo, por lo que agradecería comentarios.
PD; Adjunto parte del código del SP
Código SQL:
Ver original
DELIMITER $$ CREATE DEFINER=`root`@`%` PROCEDURE `pa_03ge_02acci_05mod_02`( IN comunidad INT, IN USER INT, IN $a VARCHAR(50), IN $b VARCHAR(50), IN $c VARCHAR(50), IN $d VARCHAR(50), IN $e VARCHAR(50), IN $f VARCHAR(50), IN $g VARCHAR(50), IN $h VARCHAR(50), IN $j VARCHAR(50), IN $k datetime, IN $l datetime, IN $m VARCHAR(50)) #declaro VARIABLES post modificadas DECLARE $a2 VARCHAR(50); DECLARE $b2 VARCHAR(50); DECLARE $c2 VARCHAR(50); DECLARE $d2 VARCHAR(50); DECLARE $e2 VARCHAR(50); DECLARE $f2 VARCHAR(50); DECLARE $g2 VARCHAR(50); DECLARE $h2 VARCHAR(50); DECLARE $j2 VARCHAR(50); DECLARE $k2 datetime; DECLARE $l2 datetime; DECLARE $m2 VARCHAR(50); #declaro el cursor DECLARE cur1 CURSOR FOR SELECT 080_acciones.id, 080_acciones.prioridad_id, 080_acciones.status_id,082_acc_status.STATUS, 080_acciones.contrato_id, objetivo, origen, descripcion, 080_acciones.creador, DATEDIFF( NOW( ) , fecha_fin ) AS retraso,080_acciones.fecha_creacion,080_acciones.fecha_inicio,080_acciones.fecha_fin,080_acciones.fecha_modif, 080_acciones.fecha_cierre, 080_acciones.modificador,080_acciones.ult_modif,080_acciones.cerrador, 030_comunidades.codigo, 030_comunidades.poblacion FROM fincas4.080_acciones LEFT JOIN fincas4.082_acc_status ON (080_acciones.status_id=082_acc_status.valor) LEFT JOIN fincas4.001_contratos ON (080_acciones.contrato_id=001_contratos.id), general2.050_auth LEFT JOIN general2.030_comunidades ON (050_auth.contrato_id=030_comunidades.id) WHERE 001_contratos.STATUS=1 AND 080_acciones.contrato_id=050_auth.contrato_id AND 080_acciones.contrato_id=comunidad AND 050_auth.user_id=USER AND 080_acciones.status_id LIKE $a2 AND 080_acciones.prioridad_id LIKE $b2 AND 080_acciones.objetivo LIKE $c2 AND 080_acciones.origen LIKE $d2 AND 080_acciones.fecha_inicio >= $e2 AND 080_acciones.fecha_inicio <= $f2 AND 080_acciones.fecha_fin >= $g2 AND 080_acciones.fecha_fin <= $h2 AND 080_acciones.creador LIKE $j2 AND 080_acciones.fecha_creacion >= $k2 AND 080_acciones.fecha_creacion <= $l2 AND 080_acciones.cerrador LIKE $m2 ORDER BY id DESC; #condicionales de post IF $a!='555' THEN SET $a2=$a; ELSE SET $a2='2';END IF; IF $b!='555' THEN SET $b2=$b; ELSE SET $b2='_%';END IF; IF $c!='555' THEN SET $c2=$c; ELSE SET $c2='_%';END IF; IF $d!='555' THEN SET $d2=$d; ELSE SET $d2='_%';END IF; IF $e!='555' THEN SET $e2=$e; ELSE SET $e2='_%';END IF; IF $f!='555' THEN SET $f2=$f; ELSE SET $f2='_%';END IF; IF $g!='555' THEN SET $g2=$g; ELSE SET $g2='_%';END IF; IF $h!='555' THEN SET $h2=$h; ELSE SET $h2='_%';END IF; IF $j!='555' THEN SET $j2=$j; ELSE SET $j2='_%';END IF; IF $k!='555' THEN SET $k2=$k; ELSE SET $k2='_%';END IF; IF $l!='555' THEN SET $l2=$l; ELSE SET $l2='_%';END IF; IF ($m!='555') THEN SET $m2=$m; ELSE SET $m2='_%';END IF;