Ver Mensaje Individual
  #1 (permalink)  
Antiguo 18/10/2010, 12:56
Avatar de catpaw
catpaw
 
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años
Puntos: 23
muchas opciones con poco codigo??

Que tal forer@s:

resulta que estoy haciendo unos reportes y para esto tengo 5 combos, se supone que la mecanica de generar la consulta es la siguiente:

1. Si se oprime el boton enviar sin haber elegido alguna opcion de los combos, el resultado de la consulta debe traer todos los registros almacenados
2. Si se oprime una opcion de las 5, el resultado de la consulta debera regresar solo el los valores q cumplan con la opcion seleccionada (es decir en el where algo='$opcion')
3. Si se oprimen dos opciones, el resultado debera regresar los resultados q cumplan con las dos opciones seleccionadas (where algo='$opcion1' AND otro='opcion2')
4. Asi por las opciones q se seleccionen, si se seleccionaron las 5 pues el where tendra las 5 condiciones

El problema viene al saber que al tener 5 opciones las combinaciones que se producen son 25... y no quiero hacer 25 if para comprobar que opciones si se seleccionaron y cuales no, por que es muy tedioso y el codigo muy extenso
Entonces quisiera ver la opcion de que a alguien se le ocurra una mejor manera para comprobar q opciones se seleccionaron y en base a eso lanzar la consulta.
Este es el codigo que llevo... hasta ahora solo comprueba si no se seleccionaron las 5 opciones y si no se selecciono una pero las demas si:

Código PHP:
//aca recibo los valores de los 5 combos
$soctrim($_GET['soc']);
$divtrim($_GET['div']);
$cecotrim($_GET['ceco']);
$clasetrim($_GET['clase']);
$subclasetrim($_GET['subclase']);

//si no se seleeciono nada
if($soc==NULL && $div==NULL && $ceco==NULL && $clase==NULL && $subclase==NULL){
    
$sql_query "Select * from tb_resguardo_activofijo";
}
else{
      if(
$soc==NULL && $div!=NULL && $ceco!=NULL && $clase!=NULL && $subclase!=NULL){
            
//si seleccionaron todas menos $soc
            
$sql_query "Select * from tb_resguardo_activofijo where division='$div' AND ceco='$ceco' AND clase='$clase' AND subclase='$subclase'";
      }
      else{
             if(
$soc!=NULL && $div==NULL && $ceco!=NULL && $clase!=NULL && $subclase!=NULL){
                
//si seleccionaron todas menos $div
                
$sql_query "Select * from tb_resguardo_activofijo where sociedad='$soc' AND ceco='$ceco' AND clase='$clase' AND subclase='$subclase'";
             }
             else{
                     if(
$soc!=NULL && $div!=NULL && $ceco==NULL && $clase!=NULL && $subclase!=NULL){
                    
//si seleccionaron todas menos $ceco
                    
$sql_query "Select * from tb_resguardo_activofijo where sociedad='$soc' AND division='$div' AND clase='$clase' AND subclase='$subclase'";
                     }
                     else{
                     if(
$soc!=NULL && $div!=NULL && $ceco!=NULL && $clase==NULL && $subclase!=NULL){
                        
//si seleccionaron todas menos $clase
                        
$sql_query "Select * from tb_resguardo_activofijo where sociedad='$soc' AND division='$div' AND ceco='$ceco' AND subclase='$subclase'";
                     }
                     else{
                         if(
$soc!=NULL && $div!=NULL && $ceco!=NULL && $clase!=NULL && $subclase==NULL){
                            
//si seleccionaron todas menos $subclase
                            
$sql_query "Select * from tb_resguardo_activofijo where sociedad='$soc' AND division='$div' AND ceco='$ceco' AND clase='$clase'";
                         }
                      }
                }
            }
        }
    }
    
$res=mysql_query($sql_query) or die('Error en la consulta'.mysql_error()); 

Última edición por catpaw; 18/10/2010 a las 13:04