que tal forer@s!!!
Estoy tratando de optimizar y mejorar una consulta dinamica que voy armando depende de las variables que me manden, espero que me puedan aconsejar y dar su punto vista sobre mi codigo y si se puede mejorar se los agradecere.
Veran, tengo un formulario con los siguientes campos:
año: [combo de años desde 1990 a 2012]
trimestre: [combo de los 4 trimestres del año]
o Seleccione la fecha: [input con formato de fecha 2012-10-29]
después puede haber o no (uno o muchos) los siguientes combos:
Estatus: [combo con los valores, por ejemplo: en mantenimiento, acabado]
Tipo: [combo con los valores, por ejemplo: mantenimiento, soporte]
...pueden haber mas combos o uno o ninguno => los valores estos combos los meto en un arreglo, por ejemplo si tengo dos combos queda, dependiendo de la opción que elijan [1,2]
entonces mis parámetros son:
año, trimestre, fecha y arreglo de combos (en todos los campos si no son seleccionados se les pone el valor s por default)
por el momento la consulta la hago con la siguiente lógica:
Código PHP:
Ver original<?php
//recibo variables
$fecha = $_GET['fecha'];
$anio = $_GET['anio'];
$trim = $_GET['trim'];
$clases = $_GET['clases']; //arreglo
$query = "select * from tabla where id='$id' and "; //esta linea siempre sera igual
if($fecha!="s"){ //si el input de fecha no esta vació
$query .= "fecha='$fecha' ";
} else{
//si el usuario elige año y trimestre
if($anio!="s" && $trim!="s"){
//entonces yo armo la fecha de inicio y la fecha final en base al trimestre correspondiente
$trim = explode("/",$trim); //recibo el trimestre: mm-dd/mm-dd $trim_ini = $trim[0];
$trim_fin = $trim[1];
$fecha_ini = $anio."-".$trim_ini;
$fecha_fin = $anio."-".$trim_fin;
//hago la condición de la consulta
$query .= "fecha between '$fecha_ini' and '$fecha_fin' ";
}
else{
//si solo eligio el año
if($anio!="s"){
$query .= "left(fecha, 4)='$anio' ";
}
}
}
?>
ahora si el arreglo es diferente de s, que significa que esta vacio, a lo anterior le sumo:
Código PHP:
Ver original<?php
$NroClases = count($clase) for($i=0;$i<$NroClases;$i++){
if($clase[$i]!="s"){
$query .= " and ";
$query .= "clase='".$clase[$i]."' ";
}
}
//finalmente
$query .= "order by id ASC";
//imprimo los valores
echo $row3['id'];
....
}
?>
Bueno los detalles que le veo a mi código actualmente es que la consulta forzosamente tiene que pasar por tener fecha o año para desplegar la consulta, es decir si yo quiero consultar solo los combos que forman el arreglo la consulta no se hace por que al armar el query les pongo que empiecen con "and" y entonces ya hay error en la sintaxis
me gustaría poder seleccionar primero cualquiera de la dos alternativas (año-trimestre/fecha o arreglo de combos) para que la consulta se lance sin problemas.
Tambien espero que me digan si habra mejor forma de hacer esto, o de optimizar mi codigo o de plano si es una aberración a la programacion lo que estoy haciendo
o si voy bien
bueno cabe aclarar que como lo tengo si funciona bien, salvo que me gustaria mejorar lo que ya les comente
gracias