Foros del Web » Programando para Internet » PHP »

Buscando un buscador!!!

Estas en el tema de Buscando un buscador!!! en el foro de PHP en Foros del Web. Estimados...necesito si alguien tiene el codigo de algun buscador que si busco dos palabras, sea capaz de buscar cada palabra por separado...algo lei por ahi ...
  #1 (permalink)  
Antiguo 05/04/2007, 22:32
 
Fecha de Ingreso: diciembre-2004
Mensajes: 354
Antigüedad: 19 años, 4 meses
Puntos: 2
Buscando un buscador!!!

Estimados...necesito si alguien tiene el codigo de algun buscador que si busco dos palabras, sea capaz de buscar cada palabra por separado...algo lei por ahi de usar split, pero la verdad es que tan avanzando aun no estoy...Por favor si alguien me pudiera ayudar.
Lo que tengo ahora es tan solo esto
Código PHP:
<?
              
if(!empty($_POST['busqueda']))
              {
$bus="'%".$_POST['busqueda']."%'";
include (
"conexion.php");
$result=mysql_db_query("$db","SELECT * FROM `noticias` WHERE `noticia` LIKE ".$bus." OR `titulo` LIKE ".$bus." ORDER BY id DESC");
$i=1;
while(
$row=mysql_fetch_array($result))

{
echo 
$i.': '.$row["titulo"].'<br>';

    
$i++;    }
mysql_free_result($result);     
}
?>
que solo me encuentra los resultados exactos...o sea...solo la frase que pongo en en el input es la que encuentra y no cada palabra por separado...

Muchisimas gracias!!
__________________
Pedro Pablo Vivanco D.
Webmaster todoalbo.cl
[email protected]
http://www.todoalbo.cl
"Dios creo el Cielo, Colo-Colo le puso todas sus Estrellas"
  #2 (permalink)  
Antiguo 05/04/2007, 23:24
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 18 años, 10 meses
Puntos: 2
Re: Buscando un buscador!!! Por favor!!

Lo único que debes hacer es separar el string que recibis con explode() por medio de los espacios. Una vez que lo tengas separado ejecutas dos o n consultas según la cantidad de palabras que tenga la busqueda. Cuando separas con explode obtenes un array y para ejecutar la busqueda por cada palabra utilizas un foreach(), ojo que aquí deberías filtrar las palabras como "de", "con", "y".

Saludos.

PD: El tema del buscador se puede hacer simple y llevarlo a un nivel muy complicado, según lo que se quiera.
  #3 (permalink)  
Antiguo 06/04/2007, 13:49
 
Fecha de Ingreso: diciembre-2004
Mensajes: 354
Antigüedad: 19 años, 4 meses
Puntos: 2
Re: Buscando un buscador!!! Por favor!!

Cita:
Iniciado por DarioDario Ver Mensaje
Lo único que debes hacer es separar el string que recibis con explode() por medio de los espacios. Una vez que lo tengas separado ejecutas dos o n consultas según la cantidad de palabras que tenga la busqueda. Cuando separas con explode obtenes un array y para ejecutar la busqueda por cada palabra utilizas un foreach(), ojo que aquí deberías filtrar las palabras como "de", "con", "y".

Saludos.

PD: El tema del buscador se puede hacer simple y llevarlo a un nivel muy complicado, según lo que se quiera.
Siempre todo el mundo me habla de explode y nunca lo he sabido usar. Me podrias decir como implementarlo y que cambios hacerle al codigo por favor?
__________________
Pedro Pablo Vivanco D.
Webmaster todoalbo.cl
[email protected]
http://www.todoalbo.cl
"Dios creo el Cielo, Colo-Colo le puso todas sus Estrellas"
  #4 (permalink)  
Antiguo 06/04/2007, 13:58
 
Fecha de Ingreso: mayo-2003
Ubicación: Buenos Aires
Mensajes: 97
Antigüedad: 20 años, 11 meses
Puntos: 0
Re: Buscando un buscador!!! Por favor!!

El explode te convierte una cadena a un array usando un separador

$cadena = "hola/como/estas";
$pepe= explode ("/",$cadena)

$pepe te va quedar
[0] = "hola"
[1] = "como"
[2] = "estas"
__________________
Mail: Su usuario es "Admin"
Usuario : estoy poniendo "Admin" y no me lo toma.
HelpDesk : lo pone sin las comillas no???
Usuario : ah, que bol..
  #5 (permalink)  
Antiguo 06/04/2007, 14:00
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 18 años, 9 meses
Puntos: 6
Re: Buscando un buscador!!! Por favor!!

Yo fui el que te dije split, pero te he querido decir explode.... aunque son muy similares :P

Código PHP:
<?php
$busqueda 
$_POST['busqueda']; //Hola como estas
$palabras_de_busqueda explode(" "$busqueda);
//Array("Hola", "como", "estas");
?>
Ahora, en lugar de tener una variable de busqueda... tenes N variables de busqueda, tantas como palabras tenga la cadena de busqueda.

Basicamente lo que debes hacer es lo mismo que tenes hecho ahora, pero para varias variables, para N. El foreach que te comenta Dario es una alternativa para recorrer el vector, la otra puede ser un for($c=0; $c < count( $palabras_de_busqueda ); $c++).

Y para buscar, podrias hacer como te comenta dario, es decir una consulta por cada pasada del bucle (foreach o for) o bien, supongo qu etambien podrias armar una consulta que vaya agregando las variables OR `noticia` LIKE ".$busqueda[0]." OR `noticia` LIKE ".$busqueda[1]." `noticia` LIKE ".$busqueda[2]." `noticia` LIKE ".$busqueda[N]; ... aunque no se que tan eficiente pueda ser esto ultimo.

Saludos.
__________________
Federico.

Mi página: www.jourmoly.com.ar
  #6 (permalink)  
Antiguo 06/04/2007, 14:11
Avatar de LedideR  
Fecha de Ingreso: noviembre-2004
Ubicación: Temuco, Chile
Mensajes: 39
Antigüedad: 19 años, 5 meses
Puntos: 1
Re: Buscando un buscador!!! Por favor!!

Hay una mejor forma para hacer las búsquedas mysql, y es el modo booleano. Creo que es la forma más efectiva.

En el siguiente link, se explica la forma de utilizar este tipo de busqueda.
http://blog.joablen.com/?p=7

ahí mismo encontrarán un ejemplo de una clase en PHP

Saludos!
__________________
-=| L\€/O |=-
  #7 (permalink)  
Antiguo 06/04/2007, 14:14
 
Fecha de Ingreso: diciembre-2004
Mensajes: 354
Antigüedad: 19 años, 4 meses
Puntos: 2
Re: Buscando un buscador!!! Por favor!!

ya...y el foreach vendria siendo??? foreach(!empty($busqueda[]))
{
}
o no??

Como puedo terminarlo?? ahi queda perfecto para separar las palabras pero porfa si no fuera mucha molestia como lo hago para eso mismo implementarlo en la busqueda.
__________________
Pedro Pablo Vivanco D.
Webmaster todoalbo.cl
[email protected]
http://www.todoalbo.cl
"Dios creo el Cielo, Colo-Colo le puso todas sus Estrellas"

Última edición por todoalbo; 06/04/2007 a las 14:26
  #8 (permalink)  
Antiguo 06/04/2007, 14:28
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 18 años, 9 meses
Puntos: 6
Re: Buscando un buscador!!! Por favor!!

No intentes adivinar como funciona, recurre al manual

Código PHP:
<?php
$vector 
= Array("uno""dos""tres""cuatro");
foreach(
$vector as $posicion)
{
           echo 
$posicion "<br>";
}
?>
__________________
Federico.

Mi página: www.jourmoly.com.ar
  #9 (permalink)  
Antiguo 06/04/2007, 14:32
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 18 años, 9 meses
Puntos: 6
Re: Buscando un buscador!!! Por favor!!

Cita:
Iniciado por LedideR Ver Mensaje
Hay una mejor forma para hacer las búsquedas mysql, y es el modo booleano. Creo que es la forma más efectiva.

En el siguiente link, se explica la forma de utilizar este tipo de busqueda.
http://blog.joablen.com/?p=7

ahí mismo encontrarán un ejemplo de una clase en PHP

Saludos!
Gracias por tu aporte Ledider, me resulto muy util pues no sabia de este tipo de busqueda.
__________________
Federico.

Mi página: www.jourmoly.com.ar
  #10 (permalink)  
Antiguo 06/04/2007, 14:38
 
Fecha de Ingreso: diciembre-2004
Mensajes: 354
Antigüedad: 19 años, 4 meses
Puntos: 2
Re: Buscando un buscador!!! Por favor!!

Cita:
Iniciado por Fridureiks Ver Mensaje
Gracias por tu aporte Ledider, me resulto muy util pues no sabia de este tipo de busqueda.
Yo le cambie todo lo que habia que cambiarle y no me funciona :(...me sale:

Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in D:\AppServ\www\ta2007\index.php on line 174

Sobre lo otro...me podrias modificar pliiiiiiiiiiiiiiiis el codigo con el foreach para ver como tendria que quedar?? :):):):) para asi aprender para una proxima vez.
__________________
Pedro Pablo Vivanco D.
Webmaster todoalbo.cl
[email protected]
http://www.todoalbo.cl
"Dios creo el Cielo, Colo-Colo le puso todas sus Estrellas"
  #11 (permalink)  
Antiguo 06/04/2007, 15:01
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 18 años, 9 meses
Puntos: 6
Re: Buscando un buscador!!! Por favor!!

Si leiste la respuesta de LedideR, aun no se que haces jugando con el foreach :P
__________________
Federico.

Mi página: www.jourmoly.com.ar
  #12 (permalink)  
Antiguo 06/04/2007, 15:04
Avatar de LedideR  
Fecha de Ingreso: noviembre-2004
Ubicación: Temuco, Chile
Mensajes: 39
Antigüedad: 19 años, 5 meses
Puntos: 1
Re: Buscando un buscador!!! Por favor!!

Intenta reemplazando tu código por esto:

Código PHP:
<?
if(!empty($_POST['busqueda']))
    {
    
$bus $_POST['busqueda'];
    
    include (
"conexion.php");
    
    
$result=mysql_db_query("$db","SELECT * ,MATCH ('noticia, titulo') AGAINST ('$bus' IN BOOLEAN MODE) AS score FROM `noticias` WHERE MATCH ('noticia, titulo') AGAINST ('$bus' IN BOOLEAN MODE) ORDER BY score DESC");
    
    
$i=1;
    
    while(
$row=mysql_fetch_array($result))
    {
        echo 
$i.': '.$row["titulo"].'<br>';
        
        
$i++;    
    }
    
    
mysql_free_result($result);     
}
?>
Es posible que tenga errores, pero lo que hace es buscar dentro de los campos 'noticia' y 'titulo' y se crea un 'campo virtual' llamado score al que por cada coincidencia con el texto ingresado se le suma 1, luego se ordenan según los que tengan más alto score, es decir, el que tenga más coincidencias.

Saludos!

Edito:
Se me olvidaba, deberias usar mysql_query() en lugar de mysql_db_query(), porque si lees en http://www.php.net/mysql_db_query, esta última funcion está obsoleta desde PHP 4.0.6
__________________
-=| L\€/O |=-

Última edición por LedideR; 06/04/2007 a las 15:14 Razón: Olvidé una sugerencia
  #13 (permalink)  
Antiguo 06/04/2007, 15:25
 
Fecha de Ingreso: diciembre-2004
Mensajes: 354
Antigüedad: 19 años, 4 meses
Puntos: 2
Re: Buscando un buscador!!! Por favor!!

Cita:
Iniciado por Fridureiks Ver Mensaje
Si leiste la respuesta de LedideR, aun no se que haces jugando con el foreach :P
Si lo trate de usar...pero me dio un error...me arrojo: Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in D:\AppServ\www\ta2007\index.php on line 174
__________________
Pedro Pablo Vivanco D.
Webmaster todoalbo.cl
[email protected]
http://www.todoalbo.cl
"Dios creo el Cielo, Colo-Colo le puso todas sus Estrellas"
  #14 (permalink)  
Antiguo 06/04/2007, 18:45
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 18 años, 10 meses
Puntos: 2
Re: Buscando un buscador!!! Por favor!!

Cita:
Iniciado por todoalbo Ver Mensaje
Si lo trate de usar...pero me dio un error...me arrojo: Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in D:\AppServ\www\ta2007\index.php on line 174
No lees el error? Te falta un } seguramente.

Salutes.
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 07:20.