Problemas con sentencia de búsqueda

Hola pedroip
Tengo un formulario de búsqueda para mi base de datos php y mysql que no consigo hacer funcionar del todo.
Este formulario consta de 7 selects de lista/menú y una caja de texto libre. Cada uno de estos selects pertenece a un campo de la BD. Por defecto están en la selección "todos", es decir, que si no se selecciona nada en ninguno se seleccionan todos los registros de cada uno de los campos a los que pertenece el select. Cada select tiene dos opciones:
1.- Si no se selecciona nada se muestran todos los registros de ese campo.
2.- Seleccionar una de las posibles opciones del select.
Esto tiene que ser así con los siete select que hay.
Además lógicamente tiene que poder dar el resultado de cualquier combinación posible que se puede dar de los siete selects.
He conseguido que funcione cuando todos los selects están en la posición "todos" o cuando hay un solo select seleccionando una opción distinta de "todos" y todos los demás selects están en "todos". Pero cuando quiero combinar varios selects con opciones seleccionadas, esto ya no funciona...
Paso a poner la sentencia que tengo hecha:
=======================================
$query_maestra = "SELECT vino.id_vino,vino.pais, vino.nombre, vino.dominio, vino.region, vino.denominacion, vino.tipo, vino.uva, vino.cosecha, vino.precio, vino.tbotella, vino.coment, vino.califica, vino.imagen FROM vino ";
/* Si no se selecciona en el formulario ningún país esta sentencia busca en todos los del campo país de la tabla vino. Hacemos lo mismo con el resto de campos */
if ($_GET['pais']!='0') {
$query_maestra .= "WHERE(vino.pais='".$_GET['pais']."') " ;
}
if ($_GET['region']!='0') {
$query_maestra .= "WHERE(vino.region='".$_GET['region']."') " ;
}
if ($_GET['denominacion']!='0') {
$query_maestra .= "WHERE(vino.denominacion='".$_GET['denominacion']."') " ;
}
if ($_GET['tipo']!='0') {
$query_maestra .= "WHERE(vino.tipo='".$_GET['tipo']."') " ;
}
if ($_GET['uva']!='0') {
$query_maestra .= "WHERE(vino.uva like'%".$_GET['uva']."%') " ;
}
if ($_GET['cosecha']<>'') {
$query_maestra .= "WHERE(vino.cosecha='".$_GET['cosecha']."') " ;
}
if ($_GET['precio']!='0') {
$query_maestra .= "WHERE(vino.precio='".$_GET['precio']."') " ;
}
if ($_GET['precio']!='0') {
$query_maestra .= "WHERE (vino.precio BETWEEN '0' AND '".$_GET['precio']."') " ;
}
if ($_GET['califica']!='0') {
$query_maestra .= "WHERE(vino.califica='".$_GET['califica']."') " ;
}
=======================================
Muchas gracias

1 Respuesta

Respuesta
1
Al final me vas a tener que mandar la botella de Vino eh!.
Este es tu código modificado.
$query_maestra = "SELECT vino.id_vino,vino.pais, vino.nombre, vino.dominio, vino.region, vino.denominacion, vino.tipo, vino.uva, vino.cosecha, vino.precio, vino.tbotella, vino.coment, vino.califica, vino.imagen FROM vino WHERE 1=1 ";
if ($_GET['pais']!='0') {
$query_maestra .= " and (vino.pais='".$_GET['pais']."') " ;
}
if ($_GET['region']!='0') {
$query_maestra .= " and(vino.region='".$_GET['region']."') " ;
}
if ($_GET['denominacion']!='0') {
$query_maestra .= " and (vino.denominacion='".$_GET['denominacion']."') " ;
}
if ($_GET['tipo']!='0') {
$query_maestra .= " and (vino.tipo='".$_GET['tipo']."') " ;
}
if ($_GET['uva']!='0') {
$query_maestra .= " and (vino.uva like'%".$_GET['uva']."%') " ;
}
if ($_GET['cosecha']<>'') {
$query_maestra .= " and (vino.cosecha='".$_GET['cosecha']."') " ;
}
if ($_GET['precio']!='0') {
$query_maestra .= " and (vino.precio='".$_GET['precio']."') " ;
}
if ($_GET['precio']!='0') {
$query_maestra .= " and (vino.precio BETWEEN '0' AND '".$_GET['precio']."') " ;
}
if ($_GET['califica']!='0') {
$query_maestra .= " and (vino.califica='".$_GET['califica']."') " ;
}
Hola pedroip
Gracias por la contestación porque funciona ahora perfectamente.
No obstante y sólo por curiosidad me gustaría que me dijeras que significa para la sentencia de búsqyeda lo de "WHERE 1=1"
Muchas gracias de verdad, me ha sido tremendamente útil.
Es un truco para hacer el código más cortito, para construir la parte del where.
Para que solo tenga que poner
'and <condición>' si esta existe
Pero en em caso de qie solo hubiera una quedaría
FROM TABLA AND <Condición>...
Por eso pongo una condición base, que siempre se cumple .. y ya solo es ir añadiendo and <copndicion> ... and <condición>.
Es para hacer más fácil la construccuión sintáctica de la select.
Si no tendría que estar viendo si tiene solo una condición si ya has puesto el where o el and ... un lio de esta forma es super fácil ...'fruto de la experiencia'
¿Verdad?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas