Buscador múltiple

  • Autor Autor AlexandreTMz
  • Fecha de inicio Fecha de inicio
A

AlexandreTMz

Curioso
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Quisiera saber como hacer un buscador con varias selecciones! He buscado por la web pero no he logrado encontrar como hacerlo! Les dejo una imagen de la idea, lo que quiero es que el usuario tenga varios campos para seleccionar y así se busque dentro de la base de datos (MySQL). Digamos que lo quiero con 2 "SELECT": el 1ero. lo que quiero buscar ya sea un tipo producto o cualquier otra cosa; y el 2do. La ubicación (como el país)
De ante mano agradezco su ayuda!
55371690d15c7_buscador.png
 
mmm porque 2 select?... si puedes usar AND en la consulta... los campos esta en la misma tabla? o tienes campos en otras?...
ejemplo:
PHP:
SELECT * FROM tabla WHERE producto="pc" AND pais="argentina";

con eso buscas el producto PC en argentina... si el pais esta en otra tabla:
PHP:
SELECT tabla1.*,tabla2.* FROM tabla1,tabla2 WHERE tabla1.producto="PC" AND tabla2.pais="argentina";
 
A ok que pasaría si quisiera ponerle otra consulta es decir no me busque 2 sino 3 o 4 ejemplo pc en Argentina precio 500dolares seguirían poniendo AND? Select * FROM tabla WHERE producto ="PC"AND país ="argentina" AND precio="500";?
 
A ok que pasaría si quisiera ponerle otra consulta es decir no me busque 2 sino 3 o 4 ejemplo pc en Argentina precio 500dolares seguirían poniendo AND? Select * FROM tabla WHERE producto ="PC"AND país ="argentina" AND precio="500";?
Si, por ejemplo:
Insertar CODE, HTML o PHP:
 SELECT * FROM tabla WHERE producto="pc" AND pais="argentina" AND precio="500"
 
Como adicional, podría sugerir el uso de los INNER, lo cual se dice que mejoran la velocidad en la consulta, y esto se ve cuando se manejan grandes datos, por eso escribo: "se dice" 😀
mmm porque 2 select?... si puedes usar AND en la consulta... los campos esta en la misma tabla? o tienes campos en otras?...
ejemplo:
PHP:
SELECT * FROM tabla WHERE producto="pc" AND pais="argentina";

con eso buscas el producto PC en argentina... si el pais esta en otra tabla:
PHP:
SELECT tabla1.*,tabla2.* FROM tabla1,tabla2 WHERE tabla1.producto="PC" AND tabla2.pais="argentina";
 
Hola, cuando haces un buscador múltiple la consulta a la base de datos varía según el numero de campos que completes en el formulario con lo cual el select tiene que ser dinámico,.

Lo que yo haría es comprobar que campos están seteados y son distintos a nada y después montar la consulta, te pongo un ejemplo:
PHP:
<?php
//Creamos las variables
$consulta='';
$parametros='';

//Creamos el primer parametro en caso de que exista
if ($_POST['columna1']!='') $parametros.="columna1=".$_POST['columna1'].'&';
//Creamos el segundo parametro en caso de que exista
if ($_POST['columna2']!='') $parametros.="columna2=".$_POST['columna2'].'&';

//Dividimos los parametros
$porciones=explode('&',$parametros);

//Contamos la cantidad de parametros
$cantidad=count($porciones)-1;

//Si hay mas de 1 parametro los unimos con AND para mysql
if ($cantidad>1){
for ($i=0; $i < $cantidad; $i++) {
    $consulta.= $porciones[$i].' AND ';
}
} else {
    $consulta.= $porciones[0].' AND ';
}

//Eliminamos el AND del final
$consulta = substr ($consulta, 0, strlen($consulta) - 4);

//Obtenemos algo como columna1=dato1 AND columna2=dato2
echo $consulta.'<br><br>';

//Pasamos los parametros dinámicos de $consulta despues del WHERE
$query_Consulta = sprintf("SELECT * FROM tabla WHERE $consulta");

?>

Saludos espero que te sirva!
 
Gracias zeuskx por responder y tomarte la molestia de mostrar el código 😛7: , aunque vi el mensaje después de estar desarrollando el buscador y vengo a mostrarle el buscador y quisiera saber si esta correcto
la lógica y si hay algún error o código innecesario ? gracias 🙂


PHP:
<?php 
error_reporting(E_ALL ^ E_DEPRECATED);

$host_db="localhost";   //Server host_db
$user_db="root";   		//User host_db	
$pass_db="";			//Pass host_db
$name_db="anime";		//Name base date

$texto=array();
$busqueda = "SELECT * FROM animes ";
$link = mysql_connect($host_db, $user_db, $pass_db);
mysql_select_db($name_db, $link);


if ((isset($_POST["button_send"])) && ($_POST["button_send"] == "search")) { // Validamos el form
//Escapamos caracteres Especiales con mysql_real_escape_string	
$genero = $_POST["filtro"];
$genero = mysql_real_escape_string($genero);

//Escapamos caracteres Especiales con mysql_real_escape_string	
$tipo = $_POST["tipo"];
$tipo = mysql_real_escape_string($tipo);

//Escapamos caracteres Especiales con mysql_real_escape_string	
$emision = $_POST["emision"];
$emision = mysql_real_escape_string($emision);

//Condicional cuando recibe por POST_
if( $tipo != "" ) { 
      $texto[0] = " tipo LIKE '%$tipo%' ";
} else {  //En caso de no escojer nada esta sera default
	  $tipo0="anime";
	  $texto[0] = " tipo LIKE '%$tipo0%' ";
}

//Condicional cuando recibe por POST_
if( $genero != "" ) { 
      $texto[1] = " AND generos LIKE '%$genero%' ";
} 

//Condicional cuando recibe por POST_
if( $emision != "" ) { 
      $texto[2] = " AND estado LIKE '%$emision%' ";
} 

//Unimos todo los parametros en caso de aver seleccionado
$texto_acambiar = implode(" " , $texto);
$busqueda.= "WHERE ".$texto_acambiar;
echo $busqueda ."<br>"; //resultado de la union

}


$query = mysql_query($busqueda, $link) or die(mysql_error()); //Busqueda despues de recibir las variables
$count=mysql_num_rows($query);

if($count>0){ // if En caso de no haver resultados 
	while ($row = mysql_fetch_array($query)){ 
			echo  $row['nombre']."<br>";
}
}else { //Cuando no hay Resultados
	echo "No se encontro resultados";
}	


?>


HTML:
<div id="filtros">
Selecciona los filtros deseados para encontrar los productos 
<form name="search" id="search" action="index3.php" method="post">
<td>
<select name="tipo" class="dropdown" >
<option selected="select" value="">Tipo:</option>
<option value="anime">anime</option>
<option value="pelicula">pelicula</option>
<option value="ova">ova</option>
</select> 
</td>

<td>
<select name="filtro"  class="dropdown" >
<option selected="select" value="">Genero:</option>
<option value="romance">Romance</option>
<option value="gore">Gore</option>
<option value="comedia">Comedia</option>
<option value="shojo">Shojo</option>
</select> 
</td>


<td>

<select name="emision" class="dropdown" >
<option selected="select" value="">Estado:</option>
<option value="emision">Emision</option>
<option value="finalizado">Finalizado</option>
</select> 
</td>

<td>
<button style="padding: 0px 9px 3px ! important;" class="dropdown" type="submit">Filtrar</button>
<input type="hidden" name="button_send" value="search" />
</td>


</form>
</div>

<style type="text/css">
#filtros {
    width: 500px;
    margin: auto;
    display: table;
    background: #FF6856;
    text-align: center;
    padding: 10px;
    border-radius: 2px;
    border: 1px solid #FE7474;
}
</style>

Perdon por el desorden pero solo es de prueva xD
 
Atrás
Arriba