Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Buscador con varios select

Estas en el tema de Buscador con varios select en el foro de Mysql en Foros del Web. Estoy haciendo mi primer buscador con varios select, y quisiera saber si es la mejor forma de hacer este tipo de buscadores. La question que ...
  #1 (permalink)  
Antiguo 14/04/2011, 12:56
 
Fecha de Ingreso: mayo-2007
Mensajes: 47
Antigüedad: 16 años, 11 meses
Puntos: 0
Pregunta Buscador con varios filtros(select)

Estoy haciendo mi primer buscador con varios select, y quisiera saber si es la mejor forma de hacer este tipo de buscadores.
La question que tengo es que cuando no se selecciona las opciones y se deja por defecto "todos" tengo que realizar demasiados comparaciones.
Les dejo lo que hice para que explicarme mejor.

Código:
<form action="results.php" method="post">
            <tr>
            <td width="26%">
            	<input type="radio" name="estado" value="Usado" checked="checked"> Usados
			</td>
            <td width="49%">	
				<input type="radio" name="estado" value="Nuevo"> Nuevos
            </td>
            </tr>
           		  
                
                  
            	  <tr>
                  <td>Marca:</td>
                  <td>
                  <select name="select1" id="select1" style="width:150px">
            	  	<option value="all">- todo -</option>
            	    
            	    <?php 
					$marcas_array = get_marcas();
					foreach($marcas_array as $marcas){
						echo "<option value=\"";
						//imprimimos las categorias
						echo $marcas['id_marca'];
						echo "\"";
						echo ">";
						echo $marcas['id_marca'].$marcas['marca']; 
						echo "\n";
						echo "</option>";		
					}
					?>
          	    </select>
                </td>
                </tr>
                
                <tr>
                <td>Modelo:</td>
                <td>
            	  <select name="select2" id="select2" style="width:150px">
                  	<option value="all">- todo -</option>
          	      </select>
            	</td>
                </tr>  
            	
                
                <tr>
                  <td>Precio:</td>
                  <td>
                  <select name="desde_price" id="desde_price" style="width:74px">
            	         	  	<option value="all">- todo -</option>
                   	<option value="3000">3.000</option>
                    <option value="3500">3.500</option>
                    <option value="4000">4.000</option>
                    <option value="4500">4.500</option>
                    <option value="5000">5.000</option>
                    <option value="5500">5.500</option>
                    <option value="6000">6.000</option>
                   ..........
                  </select>
               
                  <select name="hasta_price" id="hasta_price" style="width:73px">
            	  	<option value="all">- todo -</option>
                   	<option value="3000">3.000</option>
                 
                    <option value="5000">5.000</option>
                    <option value="5500">5.500</option>
                    <option value="6000">6.000</option>
                    <option value="6500">6.500</option>
                    <option value="7000">7.000</option>
                    <option value="7500">7.500</option>
                    <option value="8000">8.000</option>
                    <option value="8500">8.500</option>
                    <option value="9000">9.000</option>
                    <option value="9500">9.500</option>
                    <option value="10000">10.000</option>
                    <option value="10500">10.500</option>
                    <option value="11000">11.000</option>
                    ..........
            
                  </select>
                  </td>
                   
                   
                </tr>
                
                
                <tr>
                  <td>año:</td>
                  <td>
                  <select name="desde_year" id="desde_year" style="width:74px">
            	  	<option value="all">- todo -</option>
                    <option value="1950">1950</option>
                   	<option value="1951">1951</option>
                    <option value="1952">1952</option>
                    <option value="1953">1953</option>
                    <option value="1954">1954</option>
                    <option value="1955">1955</option>
                    <option value="1960">1960</option>
                    <option value="1961">1961</option>
                    .................
                   </select>
               
                  	<select name="hasta_year" id="hasta_year" style="width:73px">
            	  		<option value="all">- todo -</option>
            	  		<option value="2011">2011</option>
            	  		<option value="2010">2010</option>
            	  		<option value="2009">2009</option>
                    </select>
                  </td>
                </tr>
                
                <tr>
                  <td>Combustible:</td>
                  <td>
                  <select name="combustible" id="combustible" style="width:150px">
            	  	<option value="all">- todo -</option>
                   	<option value="nafta">nafta</option>
                    <option value="diesel">diesel</option>
                    <option value="flex">flex</option>
                    <option value="gas">gas</option>
                   </select>
                   </td>
               </tr>
               
               <tr>
               		<td>&nbsp;</td>
               		<td><input type="submit" value="Buscar"/></td>
               </tr>
          	 
            
        	</form>
            </table>

Aqui es el problema cuando no se selecciona nada y hago muchas comparaciones la primera seria....


Código:
<?php
		// recibo post
		$estado = $_POST['estado'];
		$tipo = $_POST['tipo'];
		$select1 = $_POST['select1'];
		$select2 = $_POST['select2'];
		$desde_price = $_POST['desde_price'];
		$hasta_price = $_POST['hasta_price'];
		$desde_year = $_POST['desde_year'];
		$hasta_year = $_POST['hasta_year'];
		$combustible = $_POST['combustible'];
		
		// si no se selecciona nada busco solo por estado

		if($tipo = "all" & $select1 = "all" & $select2="all" & $desde_price="all" & $hasta_price="all" &
		   $desde_year="all" & $hasta_year="all" & $combustible="all"){
			$con = conectarse();
			$query = "SELECT * FROM auto WHERE estado = '$estado'";
			$result = mysql_query($query);
		}else{
                $con = conectarse();
		
		  $query = "SELECT * FROM auto WHERE estado ='$estado' AND id_marca ='$select1'
				  	AND modelo = '$select2' AND precio BETWEEN '$desde_price' AND '$hasta_price'
					AND year BETWEEN '$desde_year' AND '$hasta_year' AND combustible = '$combustible'";

		$result = mysql_query($query);
		}
		if($result){
			//muestro resultados.......
		}
Entonces como me recomendarian hacer de otra forma este tipo de buscadores ya que si no selecciono nada realizo muchas verificaciones y consultas dependiendo de las selecciones.
Tambien si me podrian decir sobre la segunda consulta si esta bien hacerla con tantos "AND" y de que otra forma podria hacerlo. Gracias

Última edición por leo2gz; 15/04/2011 a las 13:16
  #2 (permalink)  
Antiguo 16/04/2011, 15:20
 
Fecha de Ingreso: mayo-2007
Mensajes: 47
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: Buscador con varios select

Código PHP:
Ver original
  1. <?php
  2. $query="SELECT * FROM auto ";
  3.  
  4. $predicate=array();
  5.             if ($select1 != "all"){
  6.                 $predicate[] = "id_marca = '$select1'";
  7.             }
  8.             if ($select2 != "all"){
  9.                 $predicate[] = "modelo = '$select2'";
  10.             }
  11.             if ($desde_price != "all"){
  12.                 $predicate[] = "precio BETWEEN '$desde_price'";
  13.             }
  14.             if ($hasta_price != "all"){
  15.                 $predicate[] = "'$hasta_price'";   
  16.             }
  17.             if ($desde_year != "all"){
  18.                 $predicate[] = "year BETWEEN '$desde_year'";   
  19.             }
  20.             if ($hasta_year != "all"){
  21.                 $predicate[] = "'$hasta_year'";
  22.             }
  23.             if ($combustible != "all"){
  24.                 $predicate[] = "combustible = '$combustible'"; 
  25.             }
  26.             if (count($predicate)>0){
  27.                 $query.= "WHERE estado = '$estado' AND ".implode(" AND ", $predicate);
  28.             }else{
  29.                 $query = "SELECT * FROM auto WHERE estado = '$estado'";
  30.             }
  31.        
  32.         $con = conectarse();
  33.         $result = mysql_query($query);
  34.         if($result){
  35.                 .......................................
  36.                 }
  37.  
  38. ?>


Solucionado..Gracias!
Quiza alguno le sirva...................

Etiquetas: select, buscadores
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 18:17.