Foros del Web » Programando para Internet » PHP »

filtrar por varios motivos

Estas en el tema de filtrar por varios motivos en el foro de PHP en Foros del Web. Hola soy nuevo en el foro estoy preparando un trabajo y necesito un poco de ayuda no se me ocurre una solucion para este problema ...
  #1 (permalink)  
Antiguo 30/07/2013, 22:25
Avatar de santi72  
Fecha de Ingreso: julio-2013
Mensajes: 8
Antigüedad: 10 años, 8 meses
Puntos: 0
filtrar por varios motivos

Hola soy nuevo en el foro estoy preparando un trabajo y necesito un poco de ayuda

no se me ocurre una solucion para este problema

Pagina de una consecionaria de vehiculos

a continuacion les comento las tablas que contiene mi base de datos

vehiculo=(idvehiculo, idModelo, idTipo, Dominio, Anio, Precio)
marca= (idMarca, nombremarca)
modelo=(idmodelo, idmarca, nombremodelo)
tipo= (idtipo, nombretipo)
caracteristica= (idcaracteristica, nombrecaracteristica)
vehiculo_caracteristica= (idvehiculocaracteristica, idvehiculo, idcaracteristica)

se entiende como tipo: auto, camioneta, moto camion etc
caracteristica puede ser: airbag, levantavidrios automatico, aire acondicionado, alarma etc



la que debo hacer es un "Filtrado" de vehiculos, es decir en una pagina se me desplegaran las marcas, modelos tipos y caracteristicas (que estan cargadas en la Base de datos) y el usuario seleccionaria cual desea filtrar (pudiendo dejar campos vacios) y me mostraria el resultado de los que cumplen la condicion

el problema mio es que no se como manejar los valores vacios

mi primera idea fue la siguiente

Código PHP:
                         $idmarca=($_POST['fmarca']);
                        
$idtipo= ($_POST['ftipo']);
                        
$idmodelo= ($_POST['fmodelo']);

                        
$sql="SELECT * FROM Vehiculos v, Modelos mo, Marcas m WHERE(v.idModelo = mo.idModelo) AND (m.idMarca = mo.idMarca) AND (m.idMarca= $idmarca) AND (mo.idModelo = $idmodelo) AND (v.idTipo = $idtipo) "
pero obviamente si el usuario dejo un campo sin completar la consulta no devolvera nada..

no se me ocurre otra solucion, probe cambiando los AND por OR pero da el mismo resultado

espero me sepan entender, trate de ser lo mas claro posible..
  #2 (permalink)  
Antiguo 30/07/2013, 22:31
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: filtrar por varios motivos

Si hay variables vacías sencillamente no deberías incluirlas en tu consulta, ¿no te parece lógico?

Debes ir armando la consulta conforme tengas variables, no puedes obviar ninguna y definitivamente no debes incluirla si no está definida.

Es decir, la solución no consiste en "hackear" la consulta de SQL, consiste en armar la consulta lógicamente con PHP para que siempre obtengas SQL bien formado y válido.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 30/07/2013, 22:43
Avatar de santi72  
Fecha de Ingreso: julio-2013
Mensajes: 8
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: filtrar por varios motivos

sii pero no se me ocurre una forma correcta de hacerlo, es decir si un campo viene vacio no deberia incluirlo en la consulta, pero para eso necesitaria varios IF y varias consultas distintas

perdon por la ignorancia, estoy aprendiendo, te agradezco la ayuda
  #4 (permalink)  
Antiguo 30/07/2013, 22:46
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: filtrar por varios motivos

Pues no hay una forma "correcta" si estás empezando, como sea debes aprender de la practica y el error, cuando sepas lo suficiente ya descubrirás la manera más elegante y clara, mas no la "correcta".

Y sí, debes usar estructuras de control para ir construyendo tu consulta, no hay más, para eso son.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Etiquetas: filtrar, múltiple, sql
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 03:05.