PHP y MySql consulta con Where todo vale

En PHP he creado un formulario de búsqueda que interroga a una base de
datos mysql, el archivo es búsqueda.php y los resultados se muestran
en resultado.php
La base de datos es un conjunto de cavidades (simas y cuevas) que tiene
varios campos:
Id,
Nombre, Población, provincia, tipo, profundidad, recorrido, ficha
pdf etc.
Las consultas a la base de datos se realizan desde el formulario, donde
varios campos son una lista desplegable cuyos valores son de una
consulta a es campo. Además añado un valor en blanco, que es el
primero que aparece si no se despliega nada. Por ejemplo si
desplegamos “Población” aparece todas la poblaciones de la base
de datos mas el valor en blanco que esta al principio, es el único
que se ve cuando el control esta sin desplegar.
Me interesa crear un listado de cavidades que cumplan con varios
requisitos de búsqueda para formar una consulta. De tal manera que
se seleccione un valor en la lista de campos desplegables que nos
interese usar, unidos por los otros valores de los campos
seleccionados por clausula Y. En caso de seleccionar ningún valor en
un campo por defecto envía el carácter espacio o simplemente nada.
Cuando se envía nada se entiende que en ese campo no hay filtro
alguno y todos los valores son validos. El problema es que conforme
planteo la consulta no se como le puedo decir cuando no se selecciona
nada que todos los valores son validos. Pongo un ejemplo sencillo con
dos campos (nombre y población), que he hecho en el archivo
resultado.php
…...
$consulta="SELECT*FROM
ficha where nombre = '$filtro_1' AND población = '$filtro_2'";
…........
$filtro_1 y $filtro_2 son los valores que recoge del formulario.
Por ejemplo si una determinada consulta no he seleccionado nombre porque
solo me interesa la población, al no desplegar nombre envía un
carácter espacio (por ejemplo) ¿Hay alguna manera de indicar en esa
línea que la variable $filtro_1 que cualquier cosa es valida? Es
decir una especie de comodín que todo vale. El problema se me
incrementa si en vez de dos campos pongo seis como es lo que quiero.

1 Respuesta

Respuesta
1

Cuando vayas a preguntar, expón todos los campos de tu tabla, será más fácil preparar una solución.

A decir verdad, la solución es bastante simple, creas una variable llamada $sql, la pasas por las condiciones definidas y luego la concatenas con la consulta final, y la ejecutas.

Ejemplo:

$sql=NULL;
if(isset($_GET["filtro_1"])){
  $sql.=sprinf("nombre = '%s'");
}
if(isset($_GET["filtro_2"])){
  if($sql!=NULL) $sql.=" AND ";
  $sql.=sprinf("poblacion = '%s'");
}
if($sql!=NULL) $sql=" WHERE ".$sql;
$sql="SELECT * FROM ficha".$sql.";"
mysql_query($sql);

Creo que es algo así, prueba a ver si te sale.

Muchas gracias. Estoy doblemente contento, primero por tener el problema solucionado y segundo porque después de hacer la pregunta y llevando varios días dándole vueltas anoche me hice un borrador parecido al que me propones y pensaba probar esta mañana. Pero tu código esta escrito con mucho mejor estilo que el mio e instrucciones que lo simplifican. Por tanto el aprendizaje es doble. Gracias de nuevo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas