Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Multiples filtros dentro de una consulta

Estas en el tema de Multiples filtros dentro de una consulta en el foro de PHP en Foros del Web. Saludos estimados. Otra ves acudiendo a ustedes. Estoy haciendo una busqueda con multiples filtros, estos filtros son variables enviadas desde un formulario via POST, el ...
  #1 (permalink)  
Antiguo 20/07/2014, 17:09
 
Fecha de Ingreso: junio-2014
Mensajes: 20
Antigüedad: 9 años, 10 meses
Puntos: 0
Pregunta Multiples filtros dentro de una consulta

Saludos estimados.
Otra ves acudiendo a ustedes.

Estoy haciendo una busqueda con multiples filtros, estos filtros son variables enviadas desde un formulario via POST, el usuario puede usar uno, dos o los que quiera para filtrar la informacion buscada, entonces la consulta tendria que tomar solo esas variables.

Ahi les muestro el codigo, auque ahora sin resultado.

Quiza lo estoy planteando mal, por eso acudo a su experiencia, desde ya muchas gracias.

Código PHP:
Ver original
  1. <?php
  2. ...
  3. //capturo las variables enviadas desde el formulario via POST
  4. $fdesde=$_POST["fdesde"];
  5. $fhasta=$_POST["fhasta"];
  6. $id_cliente=$_POST["id_cliente"];
  7. $id_ttm=$_POST["id_ttm"];
  8. $id_persona=$_POST["id_persona"];
  9. $id_ordmot=$_POST["id_ordmot"];
  10. $id_estado=$_POST["id_estado"];
  11. $repuestos=$_POST["repuestos"];
  12.  
  13. //relaciono las tablas donde estan los campos a buscar y mostrar
  14. $sql="SELECT *
  15. FROM orden,cliente,ttm,persona,estado,ord_mot
  16. WHERE orden.id_cliente=cliente.id_cliente
  17. AND orden.id_ttm=ttm.id_ttm
  18. AND ttm.id_estado=estado.id_estado
  19. AND orden.id_persona=persona.id_persona
  20. AND orden.id_ordmot=ord_mot.id_ordmot";
  21.  
  22. //filtro las variables que estan definidas y no estan vacias para incrustarlo en la consulta SQL
  23. if(isset($id_cliente) && $id_cliente != "")
  24. {
  25.     $sql_id_cliente ="AND orden.id_cliente='$id_cliente'"; 
  26. }
  27. if(isset($id_ttm) && $id_ttm != "")
  28. {
  29.     $sql_ttm ="AND orden.id_ttm='$id_ttm'";
  30. }
  31. if(isset($id_persona) && $id_persona  != "")
  32. {
  33.     $sql_persona ="AND orden.id_persona='$id_persona'";
  34. }
  35. if(isset($id_estado) && $id_estado != "")
  36. {
  37.     $sql_estado="AND ttm.id_estado='$id_estado'";  
  38. }
  39. if(isset($id_ordmot) && $id_ordmot != "")
  40. {
  41.     $sql_ordmot="AND orden.id_ordmot='$id_ordmot'";
  42. }
  43. if(isset($repuestos) && $repuestos != "")
  44. {
  45.     $sql_repuestos ="AND orden.repuestos='$repuestos'";
  46. }
  47. if(isset($fdesde) && $fdesde != "")
  48. {
  49.     if(isset($fhasta) && $fhasta != "")
  50.         {
  51.         $sql_fecha ="AND fecha BETWEEN '$fdesde' AND '$fhasta'";                           
  52.         }  
  53. }
  54.  
  55. //consolido la consulta
  56. $sql_total = $sql.$sql_id_cliente.$sql_ttm.$sql_persona.$sql_estado.$sql_ordmot.$sql_repuestos.$sql_fecha;  
  57. $res=mysql_query($sql_total,$conex);
  58. ...                
  59. ?>

Última edición por gnzsoloyo; 20/07/2014 a las 17:19 Razón: Marcado equivocado y OFF TOPIC en MySQL.
  #2 (permalink)  
Antiguo 20/07/2014, 17:20
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Multiples filtros dentro de una consulta

OFF TOPIC en MySQL.

Movido a PHP
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 20/07/2014, 19:21
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Multiples filtros dentro de una consulta

Usando un array para almacenar los filtros puedes tener bastante flexibilidad:

Código PHP:
Ver original
  1. $filtros = array()
  2. if(isset($_POST['campo1']) && $_POST['campo1] != '') {
  3.     $filtros[] = "columna1 = '{$_POST['campo1']}'";
  4. }
  5. if(isset($_POST['campoX']) && $_POST['campoX] != '') {
  6.      $filtros[] = "columnaX = '{$_POST['campoX']}'";
  7. }
  8.  
  9. $consulta = 'SELECT bla bla bla bla';
  10. // Luego revisas si se selecciona algún filtro
  11. if(count($filtros) > 0) {
  12.       $consulta .= " WHERE " . implode(" AND ", $filtros);
  13. }
__________________
- León, Guanajuato
- GV-Foto
  #4 (permalink)  
Antiguo 21/07/2014, 08:32
 
Fecha de Ingreso: junio-2014
Mensajes: 20
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Multiples filtros dentro de una consulta

Buen día Triby, muy agradecido por tu respuesta.

Estoy aplicando lo que me mostraste, pero no tengo resultado, no me muestra ningún registro el filtrar por uno o por varias variables.

Saludos.
  #5 (permalink)  
Antiguo 21/07/2014, 08:41
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Multiples filtros dentro de una consulta

Muestranos cómo queda armada la query, y también procura validar la ejecución de la misma.
En tu script no estás verificando que haya resultados o errores:
Código PHP:
Ver original
  1. //consolido la consulta
  2. $sql_total = $sql.$sql_id_cliente.$sql_ttm.$sql_persona.$sql_estado.$sql_ordmot.$sql_repuestos.$sql_fecha;  
  3. // Verificar como está escrita.
  4. echo $sql_total;
  5. //verificar que no haya errores.
  6. $res=mysql_query($sql_total,$conex) or die("Error al ejecutar la consulta: ".mysql_error());
Nunca asumas que porque el PHP está bien escrito, has hecho lo mismo con SQL. El SQL es otro lenguaje con sus propias reglas.

A mi entender hay dos potenciales problemas:
1) No veo que estés separando correctamente los bloques que vas agregando, por lo que en algun momento el AND de uno puede salir pegado a otro elemento de la sentencia, genrando errores imperceptibles en el código.
Esto:
Código PHP:
Ver original
  1. "...
  2. AND orden.id_ordmot=ord_mot.id_ordmot";

junto con esto:

Código PHP:
Ver original
  1. if(isset($id_cliente) && $id_cliente != "")
  2. {
  3.     $sql_id_cliente ="AND orden.id_cliente='$id_cliente'";
  4. }
Generaría esto:
Código MySQL:
Ver original
  1. ...
  2. AND orden.id_ordmot=ord_mot.id_ordmotAND orden.id_cliente=...
¿notas cómo queda el AND?

2) No veo que estés formateando la fecha de un modo correcto. ASí como la planteas:
Código PHP:
Ver original
  1. if(isset($fhasta) && $fhasta != "")
  2.         {
  3.         $sql_fecha ="AND fecha BETWEEN '$fdesde' AND '$fhasta'";                          
  4.         }
podría suceder que ingrese con un formato incorrecto de fecha. DEbe respetar el estandar AAAA-MM-DD, que MySQL usa.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 21/07/2014, 10:39
 
Fecha de Ingreso: junio-2014
Mensajes: 20
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Multiples filtros dentro de una consulta

Ya esta estimado gnzsoloyo, muchisimas gracias.

Quiero que sepas que me siento humilde al ver personas como ustedes que incondicionalmente usan su tiempo para apoyarnos, espero con el tiempo y con mas experiencia también hacerlo.
----
Tenias razón. imprimí la consulta y los AND salían pegados,
Las fechas yo lo estaba formateando de esta manera AAAA-MM-DD y si no había ninguna fecha me imprimía asi '--' entonces en el formateo quite lo guiones, de tal manera que si el usuario usa el rango de fechas estas se consultaran a mi base de datos asi 'AAAAMMDD'

Un afectuoso saludo. reitero muchas gracias.

Etiquetas: campo, filtros, multiples, mysql, select, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:37.