Foros del Web » Programando para Internet » PHP »

Full Text

Estas en el tema de Full Text en el foro de PHP en Foros del Web. Hola gente, tengo la siguiente inquitud: Necesito hacer una consulta en tablas Mysql buscando un texto que puede ser 1 o mas palabras en campos ...
  #1 (permalink)  
Antiguo 04/01/2006, 06:53
 
Fecha de Ingreso: junio-2004
Mensajes: 51
Antigüedad: 19 años, 10 meses
Puntos: 0
Full Text

Hola gente, tengo la siguiente inquitud:
Necesito hacer una consulta en tablas Mysql buscando un texto que puede ser 1 o mas palabras en campos textos.
Tengo un indice con la funcion full text sobre los campos en los cuales hare las busquedas:
Ejemplo:

Tabla1 : id / nombre / detalles / ciudad
Tabla2 : id / nombre_cat / descripcion

por ejemplo si buscara "cinta de enrollar"
Quiero que me muestre solo los registros que aparezca , la frase , o si no que aparezca las palabras cinta y enrollar , pero no los que solo aparezca una de las dos palabras.

Con full text y con MATCH () AGAINST () ya lo probe y no se puede , ya que las variantes que tiene no me permiten hacer esto.

Si alguien sabe de alguna consulta mas sencilla o que pueda hacer, se agradece.

Saludos y Buen Año Algoritmico para todos !!!!
  #2 (permalink)  
Antiguo 04/01/2006, 06:55
Avatar de turco_7  
Fecha de Ingreso: diciembre-2003
Ubicación: Córdoba, Argentina
Mensajes: 1.044
Antigüedad: 20 años, 4 meses
Puntos: 19
mmmm amigo .. este tema me parece que va en el foro de base de datos !!!! algun MOD que te mueva el tema ... saludos ...
__________________
Mi Blog http://turco7.blogspot.com
Usuario Linux : 404289
Mi última página: http://www.digitalservicecba.com.ar - Reparacion de camaras digitales!
  #3 (permalink)  
Antiguo 04/01/2006, 06:56
Avatar de Hereje  
Fecha de Ingreso: junio-2002
Ubicación: Córdoba, Argentina
Mensajes: 439
Antigüedad: 21 años, 10 meses
Puntos: 2
Creo que hay una forma de configurar la búsqueda con operadores lógicos, una vez lo ví en una página buscando en google.
__________________
Sergio
  #4 (permalink)  
Antiguo 04/01/2006, 07:15
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
En ese caso vas a tener que componer con PHP tu sentencia SQL en función de las "palabras" que pueda contener tu frase (e incluso descartanto artículos y demás palabras tal vez de menos de N caracteres (3?) ...)

Toma tu "frase" a buscar como un string y empieza a desglosarlo en palabras, usa explode() al caracter espacio (" ") para tal fin.

$frase="cinta de enrrollar";

Con una sentencia SQL unando LIKE tipo:
SELECT * FROM tabla WHERE campo LIKE '$frase'

tendrías las ocurrencias de toda la frase completa. Ya que hablas de buscar primero así y si NO se encuentra resultados .. ejecutar otras sentencias SQL por las "palabras" que componene esa frase a buscar .. cuenta los registros arrojados de la consulta:

Código PHP:
$sql="SELECT * FROM tabla WHERE campo LIKE '$frase'";
$resultado=mysql_query($sql) or die (mysql_error());
if (
mysql_num_rows($resultado) >0){
   
// presentas los resultados para la frase completa.
} else {
   
// ejecutas la sentencia SQL para las "palabras" que contenga la frase.
   // sería algo así .. No lo he probado.

$palabras=explode(" ",$frase);

// estaría bueno filtrar palabras a buscar .. por tamaño en caracteres o para eliminar artículos y demás palabras similares.

$total_palabras=count($palabras);
$x=0;
$sql_condicional='';
foreach (
$palabras as $palabra){
   
$sql_condicional .= "campo LIKE '".$palabra."'";
   if (
$total_palabras $x){
      
$sql_condicional .= " AND ";
   }
   
$x++;
}

  
$sql="SELECT * FROM tabla WHERE ".$sql_condicional;
   
// etc .. ejecuta tu consulta y muestra resultados. 


Un saludo,
  #5 (permalink)  
Antiguo 04/01/2006, 07:28
 
Fecha de Ingreso: diciembre-2005
Mensajes: 165
Antigüedad: 18 años, 3 meses
Puntos: 4
Te diré lo que hice yo para tal fin. Use la sentencia LIKE de la siguiente manera:

Supongamos que las palabras a buscar vienen de un campo de texto de nombre $buscar y hemos buscado "cinta enrollar", por tanto
$buscar ="cinta enrollar";

luego:

Código PHP:
$buscar eregi_replace (" ","%",$buscar);
$Query "SELECT * from tabla WHERE campo LIKE '%$buscar%' "
Esto dara como resultado cinta de enrollar (si lo encuentra en el campo), incluso si pones "cint enr" o cosas asi. Pero no mostrara, por ejemplo, cinta adhesiva.

Incluso podrias filtrar algunas palabras como "de","a","al" etc... para que "cinta de enrollar" fuero lo mismo que buscar "cinta enrollar" ya que "de",etc.. no creo que sea necesario para la busqueda:

Código PHP:
$filtrar = array(" de "" a "" al "" con "," del "," para "); 
$buscar str_replace($filtrar" "$buscar);
$buscar eregi_replace (" ","%",$buscar);
$Query "SELECT * from tabla WHERE campo LIKE '%$buscar%' "
No se si es lo que buscas, pero mas o menos hace eso.

Última edición por Cubatron; 04/01/2006 a las 08:15
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 09:01.