Ver Mensaje Individual
  #4 (permalink)  
Antiguo 21/11/2011, 11:46
Avatar de Eleazan
Eleazan
 
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años, 5 meses
Puntos: 326
Respuesta: Armar restriccion para consulta con GET del formulario

Y para armar las consultas, te pego un trozo de mi código, q se entiende más o menos bien:
Código PHP:
    //Así armo la clausula where!
    
$where '';
    
//Creamos la consulta de búsqueda!
    
$where doWhere($where'estado'$vEstado0);
    
$where doWhere($where'osalida'$vOficina0);
    
$where doWhereLike($where'nombre+apellidos'$vConductor);
    
$where doWhereLike($where'localizador'$vLocalizador);
    
$where doWhereLike($where'nreserva'$vNreserva);
    
$where doWhere($where'fsalida'invertDate($vDesde), 1'>=');
    
$where doWhere($where'fsalida'invertDate($vHasta), 1'<=');
    
$where doWhere($where'id_grupo'$vGrupo0); 
Y las dos funciones que uso (invertDate sólo hace eso... invertir la fecha xD), son estas:
Código PHP:

function doWhere($where$campo$value$text 1$comp '=') {
    if(isset(
$where) && !empty($where)) {
        if(isset(
$value) && !empty($value)) {
            
$where .= ' AND ';
            if(
$text$where .= "`$campo`$comp'$value'";
            else 
$where .= "`$campo`$comp$value";
        }
        
    }
    else {
        if(isset(
$value) && !empty($value) ) {
            
$where 'WHERE ';
            if(
$text$where .= "`$campo`$comp'$value'";
            else 
$where .= "`$campo`$comp$value";
        }
    }
    
    return 
$where;
}

function 
doWhereLike($where$campo$value) {
   if(
strpos($campo'+')) {
       
$campos explode('+'$campo);
       
$campo " CONCAT(`".$campos[0]."`,' ',`".$campos[1]."`) ";
   }
    if(isset(
$where) && !empty($where) ) {
        if(isset(
$value) && !empty($value)) {
            
$where .= ' AND ';
            if(!isset(
$campos)) $where .= "`$campo` LIKE '%$value%'";
            else 
$where .= "$campo LIKE '%$value%'";
          
        }
        
    }
    else {
        if(isset(
$value) && !empty($value)) {
            
$where 'WHERE ';
            if(!isset(
$campos)) $where .= "`$campo` LIKE '%$value'%";
            else 
$where .= "$campo LIKE '%$value%'";
            
        }
    }
    
    return 
$where;


Básicamente, a explicar:
Ambas funciones añaden comparaciones (en caso de existir alguna previa) o arman la comparación a partir del $where q les pasas como parámetro.
$campo es el nombre del campo SQL
$value es el valor que le das
$text es 1 si es texto, 0 si es falso
$comp es el tipo de comparacion. Por defecto, es "=" (puedes poner >, <, <=, >=...)

Y en doWhereLike arma un Like para buscar coincidencias.
Automáticamente pone un % al principio y al final. Y para poner varios campos juntos (ej: nombre y apellidos) pondrías un 'nombre+apellidos' en el $campo.. con el + le indicas que son varios campos (de momento, sólo deja 2.. no he necesitado nunca más. Supongo que si algun dia necesito 3 lo adaptaré xD)

No sé si te servirá :)

Edit: La parte de validación es previa a este paso... eso corre a tu cuenta ;)


Edit 2:

He revisado tu código.. tenías los if's muy anidados, cosa innecesaria.

Podrías haber tenido algo así:
Código PHP:
//Para cada valor
if($buscar_autor != NULL) {
    if(!isset(
$restriccion)) $restriccion "`autor`='$buscar_autor' ";
    else 
$restriccion .= " AND `autor`='$buscar_autor' ";

Y así sólo habrias tenido 5 if's, ninguno anidado...

De todas formas, te adjunto lo q tenías hecho "pasado" con mis funciones ;)
Código PHP:
<?php 
$buscar_titulo 
getGET('titulo'NULL);
$buscar_autor  getGET('autor'NULL);
$buscar_formato getGET('formato'NULL);
$buscar_visitas getGET('visitas'NULL);
$buscar_categoria getGET('categoria'NULL);
$buscar_tamano getGET('tamano'NULL);


$restriccion=""

$restriccion doWhereLike($restriccion'titulo'$buscar_titulo);
$restriccion doWhere($restriccion,'autor'$buscar_autor);
$restriccion doWhere($restriccion'formato'$buscar_formato);
$restriccion doWhere($restriccion'visitas'$buscar_visitas1'>=');
$restriccion doWhere($restriccion'categoria'$buscar_categoria);
$restriccion doWhere($restriccion'tamano'$buscar_tamano1'>=');


if(!isset(
$_GET['resultados_pagina'])) 

    
$_GET['resultados_pagina']=10

if(isset(
$_GET['pagina'])){ 
    
$pagina$_GET['pagina']; 
}else{ 
    
$pagina=1

$limite " LIMIT ".($pagina-1)*$_GET['resultados_pagina'].",".$_GET['resultados_pagina']; 
$ruta "SELECT foto_id, tamano, categoria, visitas, autor, titulo, formato FROM fotos $restriccion ORDER BY fecha DESC $limite"
?>
Quedaría algo así :)

Un saludo!
__________________
>> Eleazan's Source
>> @Eleazan

Última edición por Eleazan; 21/11/2011 a las 12:00