Foros del Web » Programando para Internet » PHP »

MATCH AGAINST error

Estas en el tema de MATCH AGAINST error en el foro de PHP en Foros del Web. Hola a todos y Feliz año nuevo. Tengo un problema con MATCH AGAINST, mi codigo es el siguiente: Código PHP: $cadbusca = "SELECT * ( nombre, categoria, texto, marca )         AGAINST ( '$busqueda' ) AS Score FROM productos WHERE         MATCH ( nombre, categoria, texto, marca ) AGAINST ( '$busqueda' )ORDER BY Score DESC" ...
  #1 (permalink)  
Antiguo 03/01/2009, 07:25
 
Fecha de Ingreso: agosto-2007
Mensajes: 101
Antigüedad: 16 años, 7 meses
Puntos: 1
MATCH AGAINST error

Hola a todos y Feliz año nuevo.
Tengo un problema con MATCH AGAINST, mi codigo es el siguiente:

Código PHP:
$cadbusca="SELECT * ( nombre, categoria, texto, marca )
        AGAINST ( '$busqueda' ) AS Score FROM productos WHERE
        MATCH ( nombre, categoria, texto, marca ) AGAINST ( '$busqueda' )ORDER BY Score DESC"
;
    }
    
    
$result=mysql("teleformacion"$cadbusca);
    While(
$row=mysql_fetch_object($result))
    { 
el error que me da es este:

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /mnt/local/home/domi/dominio.es/buscador.php on line 20

la linea 20 es:

Código PHP:
While($row=mysql_fetch_object($result)) 
Si me podeis explicar tambien esta parte os lo agradeceria:
Código PHP:
$result=mysql("teleformacion"$cadbusca);
    While(
$row=mysql_fetch_object($result)) 
No entiendo porque no se usa mysql_query () y el porque de teleformacion.
Gracias a todos

Última edición por bocasecaman; 05/01/2009 a las 08:14
  #2 (permalink)  
Antiguo 03/01/2009, 10:21
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 8 meses
Puntos: 416
Respuesta: MATCH AGAINST error

El error esta en la consulta:

Código sql:
Ver original
  1. SELECT * ( nombre, categoria, texto, marca )
  2.         AGAINST ( '$busqueda' ) AS Score FROM productos WHERE
  3.         MATCH ( nombre, categoria, texto, marca ) AGAINST ( '$busqueda' )ORDER BY Score DESC

Te falto el MATCH luego de el *.

Código sql:
Ver original
  1. SELECT *, MATCH ( nombre, categoria, texto, marca )
  2.         AGAINST ( '$busqueda' ) AS Score FROM productos WHERE
  3.         MATCH ( nombre, categoria, texto, marca ) AGAINST ( '$busqueda' ) ORDER BY Score DESC

Cita:
No entiendo porque no se usa mysql_query () y el porque de teleformacion.
Por lo que he visto en el manual, no existe tal funcion. Probablemente sea una funcion declarada por el usuario en algun archivo.
  #3 (permalink)  
Antiguo 03/01/2009, 10:46
 
Fecha de Ingreso: agosto-2007
Mensajes: 101
Antigüedad: 16 años, 7 meses
Puntos: 1
Respuesta: MATCH AGAINST error

Ronruby gracias pero me sigue dando el mismo error, te pongo el codigo entero:

Código PHP:
<?php
$busqueda 
$_POST['buscar'];
echo 
$busqueda;//me muestra perfectamente la palabra o palabras buscadas
include ('conex.php');//conectamos a la base de datos


//CUENTA EL NUMERO DE PALABRAS
$trozos=explode(" ",$busqueda);
$numero=count($trozos);
    if (
$numero==1) {
//SI SOLO HAY UNA PALABRA DE BUSQUEDA SE ESTABLECE UNA INSTRUCION CON LIKE
        
$cadbusca="SELECT *  FROM productos WHERE nombre LIKE '%$busqueda%' OR categoria LIKE '%$busqueda%' OR texto LIKE '%$busqueda%' OR marca LIKE '%$busqueda%'";
    } elseif (
$numero>1) {
//SI HAY UNA FRASE SE UTILIZA EL ALGORTIMO DE BUSQUEDA AVANZADO DE MATCH AGAINST
//busqueda de frases con mas de una palabra y un algoritmo especializado
        
$cadbusca="SELECT *, MATCH ( nombre, categoria, texto, marca )
        AGAINST ( '$busqueda' ) AS Score FROM productos WHERE
        MATCH ( nombre, categoria, texto, marca ) AGAINST ( '$busqueda' ) ORDER BY Score DESC"
;
    }
    
    
$result=mysql("teleformacion"$cadbusca);
    while (
$row=mysql_fetch_object($result))
    {
        echo
"resultado: ".$row['nombre'];
    }
?>
La verdad que si sabes el porque del error te daria mil gracias
  #4 (permalink)  
Antiguo 03/01/2009, 11:21
 
Fecha de Ingreso: agosto-2007
Mensajes: 101
Antigüedad: 16 años, 7 meses
Puntos: 1
Respuesta: MATCH AGAINST error

Lo he mejorado, pero me sigue dando error al buscar varias palabras, con una palabra va bien:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /mnt/local/home/domi/dominio/buscador.php on line 21

Código PHP:
//CUENTA EL NUMERO DE PALABRAS
$trozos=explode(" ",$busqueda);
$numero=count($trozos);
    if (
$numero==1) {
//SI SOLO HAY UNA PALABRA DE BUSQUEDA SE ESTABLECE UNA INSTRUCION CON LIKE
        
$cadbusca="SELECT *  FROM productos WHERE nombre LIKE '%$busqueda%' OR categoria LIKE '%$busqueda%' OR texto LIKE '%$busqueda%' OR marca LIKE '%$busqueda%'";    
    } elseif (
$numero>1) {
//SI HAY UNA FRASE SE UTILIZA EL ALGORTIMO DE BUSQUEDA AVANZADO DE MATCH AGAINST
//busqueda de frases con mas de una palabra y un algoritmo especializado
        
$cadbusca="SELECT *, MATCH ( nombre, categoria, texto, marca )
        AGAINST ( '$busqueda' ) AS Score FROM productos WHERE
        MATCH ( nombre, categoria, texto, marca ) AGAINST ( '$busqueda' ) ORDER BY Score DESC LIMIT 50"
;
    }
  
$result=mysql_query($cadbusca);
  while (
$row=mysql_fetch_array($result))
  {
      echo 
"resultado: ".$row['nombre'];
  }
?> 
Gracias de antemano

Última edición por bocasecaman; 05/01/2009 a las 08:15
  #5 (permalink)  
Antiguo 03/01/2009, 11:51
 
Fecha de Ingreso: agosto-2007
Mensajes: 101
Antigüedad: 16 años, 7 meses
Puntos: 1
Respuesta: MATCH AGAINST error

le he puesto esto en phpMyAdmin en la zona SQL y ahora no me remite error pero tampoco resultados:
Código:
alter table nombre_tabla add fulltext(campo_indexar_1,campo_indexar_2,etc.);
Toy ya asi
  #6 (permalink)  
Antiguo 03/01/2009, 12:19
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 8 meses
Puntos: 416
Respuesta: MATCH AGAINST error

Agregale un or die(mysql_error()) a el mysql_query.

Código PHP:
$result=mysql_query($cadbusca) or die(mysql_error()); 
  #7 (permalink)  
Antiguo 03/01/2009, 16:04
 
Fecha de Ingreso: agosto-2007
Mensajes: 101
Antigüedad: 16 años, 7 meses
Puntos: 1
Respuesta: MATCH AGAINST error

me sale este error:

Can't find FULLTEXT index matching the column list

esto se arregla con esto no???

alter table nombre_tabla add fulltext(campo_indexar_1,campo_indexar_2,etc.);

Esto perdidisimo en el buscador Ronruby, agradezco mucho tu ayuda
  #8 (permalink)  
Antiguo 03/01/2009, 16:07
 
Fecha de Ingreso: agosto-2007
Mensajes: 101
Antigüedad: 16 años, 7 meses
Puntos: 1
Respuesta: MATCH AGAINST error

e añadido lo del post anterior al phpMyAdmin y tampoco va, me desaparece el error pero no aparece nada de nada
  #9 (permalink)  
Antiguo 03/01/2009, 16:23
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 8 meses
Puntos: 416
Respuesta: MATCH AGAINST error

¿No te muestra ningun tipo de error?

Asegurate de que la palabra que estes buscando no sea muy comun. MATCH AGAINST no te muestra los resultados que aparecen mas de 50% de las veces.

Cita:
A natural language search interprets the search string as a phrase in natural human language (a phrase in free text). There are no special operators. The stopword list applies. In addition, words that are present in 50% or more of the rows are considered common and do not match. Full-text searches are natural language searches if the IN NATURAL LANGUAGE MODE modifier is given or if no modifier is given.
Tambien revisa:
http://dev.mysql.com/doc/refman/5.1/...stopwords.html
  #10 (permalink)  
Antiguo 04/01/2009, 06:18
 
Fecha de Ingreso: agosto-2007
Mensajes: 101
Antigüedad: 16 años, 7 meses
Puntos: 1
Respuesta: MATCH AGAINST error

Las palabras que busco son del unico registro que tengo. Sera por eso?? porque al tener un solo registro me dara el 100%. Voy a probarlo y os lo comento.
  #11 (permalink)  
Antiguo 04/01/2009, 06:53
 
Fecha de Ingreso: agosto-2007
Mensajes: 101
Antigüedad: 16 años, 7 meses
Puntos: 1
Respuesta: MATCH AGAINST error

Ronruby, nose como agradecertelo. No tenia ni idea de lo del 50% del match against y era eso, en cuanto le he metido mas registros a funcionado. De verdad te estoy muy agradecido.
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 20:21.