Foros del Web » Programando para Internet » PHP »

Buscador Avanzado Multiple PHP MySql

Estas en el tema de Buscador Avanzado Multiple PHP MySql en el foro de PHP en Foros del Web. HOla, estoy haciendo un buscador avanzado con opciones multiples para el usuario, es decir, que el usuario pueda tener varios parametros de busqueda, que a ...
  #1 (permalink)  
Antiguo 10/08/2009, 13:09
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Buscador Avanzado Multiple PHP MySql

HOla, estoy haciendo un buscador avanzado con opciones multiples para el usuario, es decir, que el usuario pueda tener varios parametros de busqueda, que a la vez pueda buscar palabras o frases de manera independiente o segun haya combinado la busqueda, traiga los resultados.

En este caso, que pueda encontrar una empresa a travez del nombre, o que encuentre una empresa por medio del rubro disponible desde una combo SELECT de un form

Si se trata de buscar una sola palabra o frase, es muy sencillo, dado que indexe los campos con un FULLTEXT,pero lo que no logro desarrollar es el script que me ayude a combinar las palabras o busquedas y que traiga como resultado filtrando.

No digo que me den un script hecho (aunque sera bienvenido), pero al menos prestenme una mano para desarrollarlo, y de paso sirve para los demas, pues ya busque todos los topicos de este foro y no hay nada parecido (por que no lo vi)

Aqui va la explicacion de que hice primeramente:

Si bien ya hice el primer script mediante consultas MATCH AGAINST, y funciona very good, lo que no logro es conectar es mi listado que esta en el Form Select con los resultados de la lista, y es ahi donde pido ayuda.

SI em ayudan, prometo solemnemente hacer un tuto de como desarrollar las consultas a la base de datos con el buscador coplejo, incluido la base de datos.
  #2 (permalink)  
Antiguo 10/08/2009, 13:12
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Buscador Avanzado Multiple PHP MySql

Si lo que quieres es que traiga informacion de las posible combinaciones de una palabra puedes usar el MATCH AGAINST de la base de datos
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 10/08/2009, 13:21
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Buscador Avanzado Multiple PHP MySql

En este caso inicio mi conexion a base de datos:

Código PHP:
<?php
// conexion al servidor
$server_link mysql_connect("localhost""root""");
if(!
$server_link){
die(
"Falló la Conexión "mysql_error());
}
// seleccion de base de datos
$db_selected mysql_select_db("encuentra"$server_link);
if(!
$db_selected){
 die(
"No se pudo seleccionar la Base de Datos "mysql_error());
}

?>
Luego, creo mi form para que el usuario pueda acceder a la busqueda:

Código PHP:
<form action="<?php $_SERVER['PHP_SELF'?>" method="get" name="buscar">
                      
<table width="654" border="0" cellpadding="0" cellspacing="0">
 <tr>

  <td width="314"><span class="descriptionBuscador">Empresa</span><br />
    <input name="empresa" type="text" class="campos" value="<?php echo $_GET['empresa']; ?>" /></td>

    <td width="23">&nbsp;</td>

    <td width="241" rowspan="2">
    <span class="observacion">Puedes realizar una búsqueda independiente por el nombre o rubro, o bien combinar ambos parámetros.
     </span>
      </td>
      </tr>
                        
                        
     <tr>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
    </tr>

                        
    <tr>
    <td>
     <span class="descriptionBuscador">Rubro</span><br />
              <select name="rubros" class="campos">
                <option value="Todos">Todos los Rubros</option>
                <?php

            
//Con este query obtengo los campos por los cuales el usuario puede buscar

            
$result mysql_query("SELECT * FROM rubro ORDER BY rubro_id",$server_link);


              
//Este while me trae todos los campos de mi BD que se llama "encuentra"
//en la tabla "rubro"

            
while($filas mysql_fetch_array($result)) {

        
?>
        <option value="<?php echo $filas['Rubro']; ?>"><?php echo $filas['Rubro']; ?></option>
        
              <?php

        
}//fin while

        
?>
              </select>
             </td>

        <td>&nbsp;</td>
        <td valign="bottom">
          <input name="encontrar" type="submit" class="botonBuscar" value="Encontrar!" />
        </td>
  </tr>
                    
                    
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
 </tr>

</table>
</form>
Hasta aca, sin Dramas, pues el Form Select me trae todos mis rubros disponibles en la tabla rubros, lo que no estoy pudiendo entender es lo que sigue, es decir, como vincular el campo INPUT donde la gente mete el nombre de la empresa, con el campo Select, y que tambien em realice una busqueda, si solo quiere poner una frase o palabra, o solo seleccionar un rubro, o si quiere combinar ambos
  #4 (permalink)  
Antiguo 10/08/2009, 13:25
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Buscador Avanzado Multiple PHP MySql

Aca es donde traigo los resultados, que como dije, el Match Against, me sirven para el campo INPUT, incluso, como estan indexados mis campos puedo meter no solo el nombre de la empresa, sino un telefono, apellido, mail, direccion, o lo que sea, y me trae los resultados desde el Input.. pero no logro, o al menos ya se fatigo mi pequeña mente de como hacer que tambien se combinen con el select.. hice un intento, y no lo logre, ahi va (repito, mi problema es el select que no puedo agruparla con la busqueda de mi input, o que haga una busqueda independiente)

Código PHP:
<div id="resultados">
            <?php

        
// varificamos que el formulario halla sido enviado
        
if(isset($_GET['encontrar']) && $_GET['encontrar'] == 'Encontrar!'){
            
$empresa addslashes($_GET['empresa']);
            
$rubro addslashes($_GET['Rubro']);
            
            
// hacemos la consulta de busqueda
            // ver explicación mas abajo
            
if(isset($_GET['empresa'])){
            
$sqlBuscar mysql_query("SELECT Empresa, Rubro, Telefono, Movil, Direccion, Ciudad, Mail,
            MATCH (Empresa, Rubro, Telefono, Movil, Direccion, Ciudad, Mail)
            AGAINST ('$empresa' IN BOOLEAN MODE) AS coincidencias
            FROM empresas
            WHERE MATCH (Empresa, Rubro, Telefono, Movil, Direccion, Ciudad, Mail)
            AGAINST ('$empresa' IN BOOLEAN MODE)
            ORDER BY coincidencias DESC"
$server_link)
            or die(
mysql_error()); 
            }
            
            
        if(isset(
$_GET['rubro'])) {
         
$sqlBuscar mysql_query("SELECT *
             FROM empresas
             WHERE 
             rubro LIKE '%$rubro%'"
$server_link);
            }
            
$totalRows mysql_num_rows($sqlBuscar);
            
            
// Enviamos un mensaje
            // indicando la cantidad de resultados ($totalRows)
            // para la frase busada ($frase)
            
if(!empty($totalRows)){
            echo 
stripslashes("<p><span class='resultado'>Resultados Encontrados:</span>  
            <strong>$totalRows</strong> <span class='resultado'>para la b&uacute;squeda </span> <strong>$frase</strong></p>"
); 
            
            
// mostramos los resultados
            
while($row mysql_fetch_array($sqlBuscar)){
            echo 
"<em>Coincidencias de palabras: "round($row['coincidencias']) ."</em>";
            echo 
"<table width='700' border='0' cellpadding='0' cellspacing='0'>
            <tr> 
            <td width='70'>Empresa:</td>
            <td width='630'>
            <strong><a href='#'>$row[Empresa]</a>:</strong></td>
            </tr>"
;
            echo 
"<tr> 
            <td>Rubro:</td><td>"
.substr(strip_tags($row['Rubro']), 0255)."</td></tr>";
            echo 
"<tr> <td>Tel&eacute;fono:</td><td>".substr(strip_tags($row['Telefono']), 0255)."</td></tr>";
            echo 
"<tr> <td>Movil:</td><td>".substr(strip_tags($row['Movil']), 0255)."</td></tr>";
            echo 
"<tr> <td>Ciudad:</td><td>".substr(strip_tags($row['Ciudad']), 0255)."</td></tr>";
            echo 
"<tr> <td>Ciudad:</td><td>".substr(strip_tags($row['Mail']), 0255)."</td></tr>";
            echo 
"</table><p>&nbsp;</p>";
            }
            
            
// si se ha enviado vacio el formulario
            // mostramos un mensaje del tipo Oops...!
            
}elseif(empty($_GET['empresa'])){
            echo 
"Debe introducir una palabra o frase.";
            
            
            
// si no hay resultados
            // otro mensaje del tipo Oops...!
            
}elseif($totalRows == 0){
            echo 
stripslashes("Su busqueda no arrojo resultados para <strong>$frase</strong>");
            }
        }
//if
        
?>
            
            
          </div>

</body>
</html>
Thanks
  #5 (permalink)  
Antiguo 10/08/2009, 13:35
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Buscador Avanzado Multiple PHP MySql

Sorry, cuando hablo del Select, no me refiero al operador SQL, sino al Campo del form tipo Select Option
  #6 (permalink)  
Antiguo 10/08/2009, 13:36
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Buscador Avanzado Multiple PHP MySql

A ver si entendi. ¿Tu dices que tienes dos campos que quieres unir uno de select y otro de texto? Si es así con concatenar debe ser suficiente.

$variable = $_POST["Campo_de_texto"].$_POST["Campo_de_select"];
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #7 (permalink)  
Antiguo 10/08/2009, 13:42
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Buscador Avanzado Multiple PHP MySql

ASi mismo es Señor "abimaelrc"

Thanks, a veces es bueno que alguien despierte a las neuronas..

Pero si quiero que el select de por si solo me funcione?, es la parte que no logor hacer tampoco, dado que al darle un rubro, ni bien hago enter o pulso el boton submit, me vuelve al estado inicial de option, es decir, Todos los rubros, y el tipo de consulta SQL que deberia ir en este, aunque sea en Pseudocodigo

Gracias
  #8 (permalink)  
Antiguo 10/08/2009, 13:44
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Buscador Avanzado Multiple PHP MySql

Con la concatenacion no debe dar problemas. Tratalo y nos dejas saber como te fue. Trata de hacer de las dos formas una sin el select y otra sin el texto.

ultimamente me estoy sintiendo viejo con lo que me dicen de DON y Señor
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #9 (permalink)  
Antiguo 10/08/2009, 14:21
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Buscador Avanzado Multiple PHP MySql

La cocatenacion tiene mucho sentido, pero de seguro hay algo que no estoy haciendo bien, por eso no me sale...

Es decir, quiero una busqueda de por ejemplo EMPRESA+RUBRO+CIUDAD o bien que busque solo Empresa+Ciudad o solo Empresa..

Pasa que, como explique, no puedo hacer que el resultado de la lista se mantenga, es decir, cuando le doy buscar, se pierde de foco y vuelve al priemer Value, es decir, Todos los Rubros, tampoco soy un maestro en esto, pero algo entiendo, pero aca me tranque.

A la par de no poder mantener el foco en mi lista, tampoco puedo hacer una busqueda con el.. es decir, que yo seleccione un rubro de la misma, e independientemente busque ese rubro y traiga como resultados las empresas con esa coincidencias de rubros.

Y si eso funcionara, la cocatenacion tal vez seria mas facil, pero desde ya, no me funciona este campo de Select, algo estoy haciendo mal, o el procedimiento es erroneo, dado que solo son 2 campos, pero necesito agregarle al menos 5 mas, incluidos unos Checked.. pero entendiendo esto, creo poder entender mejor lo otro.. probe con el LIKE en el select, pero no lo logre... Y el like, para las empresas o direcciones no me seria apto, dado que el usuario no siempre se sabe bien los nombres, y si introduce dos palabras no juntas no dara resultado, y la cosa es que si de resultado, o resultados, salvo que en verdad no existan coicidencias..

Favor mas ayuda (si pueden)
  #10 (permalink)  
Antiguo 10/08/2009, 14:22
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Buscador Avanzado Multiple PHP MySql

¿Hiciste algun cambio a lo que ya habias escrito anteriormente? Si es así copia el codigo nuevo
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #11 (permalink)  
Antiguo 10/08/2009, 14:30
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Esto es lo que cambie, o al menos entendi..

Código PHP:
if(isset($_GET['encontrar']) && $_GET['encontrar'] == 'Encontrar!'){
            
$empresa addslashes$_GET['empresa']).addslashes($_GET['Rubro']); 
            
            
$sqlBuscar mysql_query("SELECT Empresa, Rubro, Telefono, Movil, Direccion, Ciudad, Mail,
            MATCH (Empresa, Rubro, Telefono, Movil, Direccion, Ciudad, Mail)
            AGAINST ('$empresa' IN BOOLEAN MODE) AS coincidencias
            FROM empresas
            WHERE MATCH (Empresa, Rubro, Telefono, Movil, Direccion, Ciudad, Mail)
            AGAINST ('$empresa' IN BOOLEAN MODE)
            ORDER BY coincidencias DESC"
$server_link)
            or die(
mysql_error()); 
            

            
$totalRows mysql_num_rows($sqlBuscar); 
no tiene drama en le texto, si en el Select.. sorry por tantas consultas, y agradezco las atenciones

Última edición por GatorV; 12/08/2009 a las 12:01
  #12 (permalink)  
Antiguo 12/08/2009, 11:54
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Buscador Avanzado Multiple PHP MySql

De nuevo vuelvo a reiterar.. No pido el script completo, es decir, no me lo den servido si es que no quieren, pero la verdad no se como continuar con el script para que me filtre lo que quiero.. es decir, en el caso del Input me filtra bien, sin dramas.

En el caso del select tengo 3 inconvenientes:

1- es que actue como buscador independiente, es decir, si no he introducido nada en el input, que me lo busque, de acuerdo a lo que trae desde mi BD, incluso el Todos los rubros.

2- Que si hay algo en el input, y en el combo me haga una busqueda mas exacta. es decir, palabra+seleccion

3- El gran problema es que al darle enviar, o INTRO, automaticamente el combo vuelve al estado inicial, o sea, Todos los Rubros, y no puedo lograr que se quede en la seleccion de busqueda.

Si me ayudan de apoco, aunque sea con pseudocodigo podria avanzar algo, dado que no soy un experto en PHP, y muchas acotaciones que para los "programadores" puede resultar logica, para los novatos como yo tal vez sea mas abstracto, aunque igual hago el intento.

Favor ayuda! Dado que me quede en la ultima parte del Script.
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 02:12.