Ver Mensaje Individual
  #4 (permalink)  
Antiguo 01/11/2012, 12:25
Avatar de Triby
Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: armar consulta dinámica con múltiples parametros

No veo la dependencia entre $cad1 y $cad2, lo único que te está complicando la consulta es que siempre incluyes and y en el for tienes que eliminar el agregado en la última iteración.

Código PHP:
Ver original
  1. <?php
  2. //recibo variables
  3. $fecha = $_GET['fecha'];
  4. $anio = $_GET['anio'];
  5. $trim = $_GET['trim'];
  6. $clases = $_GET['clases']; //arreglo
  7.  
  8. $query = "select * from tabla where "; //esta linea siempre sera igual
  9. $filtros = array("id='$id'"); // Inicializas filtros con ID
  10.  
  11. // Utiliza if's anidados, el código queda más legible
  12. if($fecha!="s"){
  13.    //si el input de fecha no esta vació
  14.    $filtros[] = "fecha='$fecha' ";
  15. } else if($anio!="s" && $trim!="s"){
  16.     //si el usuario elige año y trimestre
  17.          //entonces yo armo la fecha de inicio y la fecha final en base al trimestre correspondiente
  18.          $trim = explode("/",$trim); //recibo el trimestre: mm-dd/mm-dd
  19.          $trim_ini = $trim[0];
  20.          $trim_fin = $trim[1];
  21.          $fecha_ini = $anio."-".$trim_ini;
  22.          $fecha_fin = $anio."-".$trim_fin;
  23.          //hago la condición de la consulta
  24.          $filtros[] = "fecha between '$fecha_ini' and '$fecha_fin' ";
  25. } else if($anio!="s"){
  26.        //si solo eligio el año
  27.        $filtros[] = "left(fecha, 4)='$anio' ";
  28. }
  29.  
  30. // Segunda parte
  31. $clase = explode(",",$clases);
  32.  
  33. // Recorres $clase directamente, con foreach(), no necesitas contar los elementos
  34. // $i es el índice que usabas en el for, $valor corresponde a $clase[$i]
  35. foreach($clase as $i => $valor) {
  36.     if($clase[$i] != 's') {
  37.         $filtros[] = "id_{$array_clases[$i]} = '$valor'";
  38.     }
  39. }
  40.  
  41. // No necesitas comparar cad1 y cad2, sólo concatenas lo que haya en $filtros
  42. $query .= implode(' and ', $filtros);
  43.  
  44. //concluyo la consulta con un order by
  45. $query .= " order by id_arch ASC";

La lógica siguie siendo la misma, excepto por la complicación que tenías con $cad1 y $cad2
__________________
- León, Guanajuato
- GV-Foto