Foros del Web » Programando para Internet » PHP »

simplificar condiciones para una consulta?

Estas en el tema de simplificar condiciones para una consulta? en el foro de PHP en Foros del Web. Núnca había hecho un código tan monstruoso cómo este, lo que necesito es simpificar esto, pués si funciona bien, pero no me agrada ver tanto ...
  #1 (permalink)  
Antiguo 08/01/2009, 10:25
Avatar de Yamilskate  
Fecha de Ingreso: septiembre-2006
Mensajes: 94
Antigüedad: 17 años, 7 meses
Puntos: 0
simplificar condiciones para una consulta?

Núnca había hecho un código tan monstruoso cómo este, lo que necesito es simpificar esto, pués si funciona bien, pero no me agrada ver tanto código para realizar una simple busqueda... Espero alguien me pueda ayuda a encontrar una forma de simplificar esto:

Código PHP:
if ( ($por=="colonia") && ($estado!="") && ($controlador=="") && ($perito=="") )
$cadbusca="SELECT * FROM cve_shf WHERE estado = '$estado' AND colonia LIKE '%$busqueda%' LIMIT $limite;";
if ( (
$por=="domicilio") && ($estado!="") && ($controlador=="") && ($perito=="") )
$cadbusca="SELECT * FROM cve_shf WHERE estado = '$estado' AND domicilio LIKE '%$busqueda%' LIMIT $limite;";
if ( (
$por=="solicitante") && ($estado!="") && ($controlador=="") && ($perito=="") )
$cadbusca="SELECT * FROM cve_shf WHERE estado = '$estado' AND solicitante LIKE '%$busqueda%' LIMIT $limite;";
         
if ( (
$por=="colonia") && ($estado!="") && ($controlador=="") && ($perito!="") )
$cadbusca="SELECT * FROM cve_shf WHERE estado = '$estado' AND perito = '$perito' AND colonia LIKE '%$busqueda%' LIMIT $limite;";
if ( (
$por=="domicilio") && ($estado!="") && ($controlador=="") && ($perito!="") )
$cadbusca="SELECT * FROM cve_shf WHERE estado = '$estado' AND perito = '$perito' AND domicilio LIKE '%$busqueda%' LIMIT $limite;";
if ( (
$por=="solicitante") && ($estado!="") && ($controlador=="") && ($perito!="") )
$cadbusca="SELECT * FROM cve_shf WHERE estado = '$estado' AND perito = '$perito' AND solicitante LIKE '%$busqueda%' LIMIT $limite;";
         
if ( (
$por=="colonia") && ($estado=="") && ($controlador=="") && ($perito=="") )
$cadbusca="SELECT * FROM cve_shf WHERE colonia LIKE '%$busqueda%' LIMIT $limite;";
if ( (
$por=="domicilio") && ($estado=="") && ($controlador=="") && ($perito=="") )
$cadbusca="SELECT * FROM cve_shf WHERE domicilio LIKE '%$busqueda%' LIMIT $limite;";
if ( (
$por=="solicitante") && ($estado=="") && ($controlador=="") && ($perito=="") )
$cadbusca="SELECT * FROM cve_shf WHERE solicitante LIKE '%$busqueda%' LIMIT $limite;";
         
if ( (
$por=="colonia") && ($estado=="") && ($controlador=="") && ($perito!="") )
$cadbusca="SELECT * FROM cve_shf WHERE colonia LIKE '%$busqueda%' AND perito = '$perito' LIMIT $limite;";
if ( (
$por=="domicilio") && ($estado=="") && ($controlador=="") && ($perito!="") )
$cadbusca="SELECT * FROM cve_shf WHERE domicilio LIKE '%$busqueda%' AND perito = '$perito' LIMIT $limite;";
if ( (
$por=="solicitante") && ($estado=="") && ($controlador=="") && ($perito!="") )
$cadbusca="SELECT * FROM cve_shf WHERE solicitante LIKE '%$busqueda%' AND perito = '$perito' LIMIT $limite;";
         
if ( (
$por=="colonia") && ($estado=="") && ($controlador!="") && ($perito=="") )
$cadbusca="SELECT * FROM cve_shf WHERE controlador = '$controlador' AND colonia LIKE '%$busqueda%' LIMIT $limite;";
if ( (
$por=="domicilio") && ($estado=="") && ($controlador!="") && ($perito=="") )
$cadbusca="SELECT * FROM cve_shf WHERE controlador = '$controlador' AND domicilio LIKE '%$busqueda%' LIMIT $limite;";
if ( (
$por=="solicitante") && ($estado=="") && ($controlador!="") && ($perito=="") )
$cadbusca="SELECT * FROM cve_shf WHERE controlador = '$controlador' AND solicitante LIKE '%$busqueda%' LIMIT $limite;";
         
if ( (
$por=="colonia") && ($estado=="") && ($controlador!="") && ($perito!="") )
$cadbusca="SELECT * FROM cve_shf WHERE controlador = '$controlador' AND perito = '$perito' AND colonia LIKE '%$busqueda%' LIMIT $limite;";
if ( (
$por=="domicilio") && ($estado=="") && ($controlador!="") && ($perito!="") )
$cadbusca="SELECT * FROM cve_shf WHERE controlador = '$controlador' AND perito = '$perito' AND domicilio LIKE '%$busqueda%' LIMIT $limite;";
if ( (
$por=="solicitante") && ($estado=="") && ($controlador!="") && ($perito!="") )
$cadbusca="SELECT * FROM cve_shf WHERE controlador = '$controlador' AND perito = '$perito' AND solicitante LIKE '%$busqueda%' LIMIT $limite;";
         
if ( (
$por=="colonia") && ($estado!="") && ($controlador!="") && ($perito=="") )
$cadbusca="SELECT * FROM cve_shf WHERE estado = '$estado' AND controlador = '$controlador' AND colonia LIKE '%$busqueda%' LIMIT $limite;";
if ( (
$por=="domicilio") && ($estado!="") && ($controlador!="") && ($perito=="") )
$cadbusca="SELECT * FROM cve_shf WHERE estado = '$estado' AND controlador = '$controlador' AND domicilio LIKE '%$busqueda%' LIMIT $limite;";
if ( (
$por=="solicitante") && ($estado!="") && ($controlador!="") && ($perito=="") )
$cadbusca="SELECT * FROM cve_shf WHERE estado = '$estado' AND controlador = '$controlador' AND solicitante LIKE '%$busqueda%' LIMIT $limite;";
         
if ( (
$por=="colonia") && ($estado!="") && ($controlador!="") && ($perito!="") )
$cadbusca="SELECT * FROM cve_shf WHERE estado = '$estado' AND controlador = '$controlador' AND perito = '$perito' AND colonia LIKE '%$busqueda%' LIMIT $limite;";
if ( (
$por=="domicilio") && ($estado!="") && ($controlador!="") && ($perito!="") )
$cadbusca="SELECT * FROM cve_shf WHERE estado = '$estado' AND controlador = '$controlador' AND perito = '$perito' AND domicilio LIKE '%$busqueda%' LIMIT $limite;";
if ( (
$por=="solicitante") && ($estado!="") && ($controlador!="") && ($perito!="") )
$cadbusca="SELECT * FROM cve_shf WHERE estado = '$estado' AND controlador = '$controlador' AND perito = '$perito' AND solicitante LIKE '%$busqueda%' LIMIT $limite;"
Para que se den una idea de lo que hago con este código es realizar busquedas avanzadas (osea con varios campos) cómo se muetra en la imagen:

http://img184.imageshack.us/img184/3179/ayudaze8.jpg <- Ver imagen, grande

Gracias de antemano, saludos cordiales!

Última edición por Yamilskate; 08/01/2009 a las 10:31
  #2 (permalink)  
Antiguo 08/01/2009, 11:45
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: simplificar condiciones para una consulta?

Tema trasladado a PHP.

http://www.forosdelweb.com/f21/funci...-datos-413499/
  #3 (permalink)  
Antiguo 08/01/2009, 11:48
 
Fecha de Ingreso: mayo-2006
Ubicación: Bogotá
Mensajes: 2.061
Antigüedad: 17 años, 11 meses
Puntos: 50
Respuesta: simplificar condiciones para una consulta?

pues esa pregunta es mas de programacion pero le voy a dar un ejemplo para que se guie y pueda mejorar su codigo

Código PHP:
<?
$consulta 
"select * from tabla where 1=1";
if (
$variable1 != "")
$consulta $consulta." and campo1 = $variable1";
if (
$variable2 != "")
$consulta $consulta." and campo2 = $variable2";
if (
$variable3 != "")
$consulta $consulta." and campo3 = $variable3";
if (
$variable4 != "")
$consulta $consulta." and campo4 = $variable4";
$resultado mysql_query($consulta);
?>
solo va formando el string con toda la consulta dependiendo los datos que haya seleccionado el usuario y de ultimo ejecuta lo que se formo y listo.
  #4 (permalink)  
Antiguo 09/01/2009, 09:54
Avatar de Yamilskate  
Fecha de Ingreso: septiembre-2006
Mensajes: 94
Antigüedad: 17 años, 7 meses
Puntos: 0
Respuesta: simplificar condiciones para una consulta?

Gracias, es justo lo que necesitaba.
Este foro es realmente bueno, aquí la experiencia de los usuarios se eleva gradualmente de forma tan efectiva, gracias por compartir sus conocimientos con nosotros.

Mi código paso de ser ese monstruo a ser esta pequeña pieza:
Código PHP:
$cadbusca "SELECT * FROM cve_shf WHERE 1=1"
        if (
$estado != ""
          
$cadbusca $cadbusca." AND estado = $estado";
        if (
$controlador != ""
          
$cadbusca $cadbusca." AND controlador = $controlador"
        if (
$perito != ""
          
$cadbusca $cadbusca." AND perito = $perito";
        if (
$por == "colonia"
          
$cadbusca $cadbusca." AND colonia LIKE '%$busqueda%'";
        if (
$por == "domicilio"
          
$cadbusca $cadbusca." AND domicilio LIKE '%$busqueda%'";
        if (
$por == "solicitante"
          
$cadbusca $cadbusca." AND solicitante LIKE '%$busqueda%'";
        
$cadbusca $cadbusca."LIMIT $limite"
Saludos cordiales! =)

Última edición por Yamilskate; 09/01/2009 a las 10:01
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 19:24.