Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema con MATCH AGAIST

Estas en el tema de Problema con MATCH AGAIST en el foro de PHP en Foros del Web. Necesito hacer una busqueda de palabras a la tabla cupones en los campos cupon_titulo y cupon_descripcion que llega en la variable $busqueda. Tengo esto pero ...
  #1 (permalink)  
Antiguo 07/01/2014, 13:28
 
Fecha de Ingreso: mayo-2009
Mensajes: 166
Antigüedad: 14 años, 11 meses
Puntos: 2
Problema con MATCH AGAIST

Necesito hacer una busqueda de palabras a la tabla cupones en los campos cupon_titulo y cupon_descripcion que llega en la variable $busqueda.

Tengo esto pero no me anda!

Código PHP:
$cadbusca=mysql_query("SELECT * , MATCH (cupon_titulo,cupon_descripcion) AGAINST ('$busqueda') FROM cupones WHERE MATCH (cupon_titulo, cupon_descripcion) AGAINST ('$busqueda')"); 

No puedo dar con los resultados. Alguna ayuda?
  #2 (permalink)  
Antiguo 07/01/2014, 14:00
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con MATCH AGAIST

Cita:
Tengo esto pero no me anda!
¿Podrías ser un poco más específico?

¿En qué sentido no te anda? ¿Te da error? ¿No hay erroes pero no devuelve datos? ¿Cuántos datos tiene esa tabla y qué longitud tiene el texto de prueba que metes en la variable?

"no me anda" no nos dice nada como para empezar a analizar.
Al menos postea todo el codigo implciado, y no sólo la query...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 08/01/2014, 08:19
 
Fecha de Ingreso: mayo-2009
Mensajes: 166
Antigüedad: 14 años, 11 meses
Puntos: 2
Respuesta: Problema con MATCH AGAIST

OK, pensé que no era algo tan dificil de explicar. Me explico mejor.

Tengo un buscador que si recibe una palabra busca con LIKE pero si es mas de una busca con MATCH AGAINST en los campos cupon_titulo y cupon_descripción el valor que trae por POST $busqueda

Anda todo bien pero el resultado me tira este error:

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\wamp\www\descuentos\bd\inc\contenidos\buscar.ph p on line 52
  #4 (permalink)  
Antiguo 08/01/2014, 08:21
 
Fecha de Ingreso: mayo-2009
Mensajes: 166
Antigüedad: 14 años, 11 meses
Puntos: 2
Respuesta: Problema con MATCH AGAIST

Creo que tengo mal escrita la cadena de usqueda:
$cadbusca=mysql_query("SELECT * , MATCH (cupon_titulo,cupon_descripcion) AGAINST ('$busqueda') FROM cupones WHERE MATCH (cupon_titulo, cupon_descripcion) AGAINST ('$busqueda')");
  #5 (permalink)  
Antiguo 08/01/2014, 09:12
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con MATCH AGAIST

Cita:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\wamp\www\descuentos\bd\inc\contenidos\buscar.ph p on line 52
Esto te sucede porque no estás validando si la consulta tuvo éxito.
Tu asumes que siempre devuelve datos, y eso no es necesariamente cierto.
Podría perfectamente estar ejecutandose de modo correcto la consulta en SQL, pero no devolver ningún registro, entonces mysql_fetch_array() apuntaría a un registro inexistente.
Como mínimo deberías verificar si devolvió algún registro. Eso es medio básico.

Además, dependerá del contexto de prueba. Si tuvieses un único registro, o las palabras buscadas no tienen al menos cinco caracteres, la consulta probablemente no devuelva registros, y eso no implicaría un error, sino un defecto de las condiciones de búsqueda.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 08/01/2014, 09:48
 
Fecha de Ingreso: mayo-2009
Mensajes: 166
Antigüedad: 14 años, 11 meses
Puntos: 2
Respuesta: Problema con MATCH AGAIST

Por eso te digo que esta mal el SELECT porque yo escribo 2 palabras y me tira eso aunque se que esta en la db lo que busco.

Aca esta el código:

Código PHP:
<?php
$busqueda
$_POST['buscar'];
// BUSCAR si la cadena existe
if ($busqueda<>''){
   
//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
   
$cadbuscamysql_query("SELECT * FROM cupones WHERE cupon_titulo LIKE '%$busqueda%' OR cupon_texto LIKE '%$busqueda%' OR cupon_copete 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=mysql_query("SELECT *, MATCH (cupon_titulo,cupon_descripcion) AGAINST ('$busqueda') FROM cupones WHERE MATCH (cupon_titulo, cupon_descripcion) AGAINST ('$busqueda')");
}
}
?>
  #7 (permalink)  
Antiguo 08/01/2014, 10:01
 
Fecha de Ingreso: noviembre-2012
Mensajes: 76
Antigüedad: 11 años, 5 meses
Puntos: 3
Respuesta: Problema con MATCH AGAIST

Prueba esto:
Código PHP:
$cadbusca mysql_query("SELECT *, MATCH (cupon_titulo, cupon_descripcion) AGAINST ('" $busqueda "' IN BOOLEAN MODE) AS coincidencias FROM cupones AND MATCH (cupon_titulo, cupon_descripcion) AGAINST ('" $busqueda "' IN BOOLEAN MODE) ORDER BY coincidencias DESC"); 
Saludos!
  #8 (permalink)  
Antiguo 08/01/2014, 10:03
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con MATCH AGAIST

Cita:
Iniciado por rakshaka Ver Mensaje
Por eso te digo que esta mal el SELECT porque yo escribo 2 palabras y me tira eso aunque se que esta en la db lo que busco.
Eso depende del contexto.
MATCH() AGAINST() busca con palabras completas, no con parte de ellas, por lo que no sólo funciona diferente a LIKE, sino que además no lo hace por aproximación.
Lo mejor que puedes hacer es copiar la sentencia que estás probando, ponerle el texto que quieres bucar y probarlo manualmente en phpMyadmin.
De esa forma podrás comprobar si el problema es de datos.

Si con esas mismas palabras en phpMyadmin y la aplicación, funcionan distinto, yo que tu verificaría las variables.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 08/01/2014, 10:24
 
Fecha de Ingreso: mayo-2009
Mensajes: 166
Antigüedad: 14 años, 11 meses
Puntos: 2
Respuesta: Problema con MATCH AGAIST

Con este:

Código PHP:
SELECT *, MATCH (cupon_titulocupon_descripcionAGAINST ('" . $busqueda . "' IN BOOLEAN MODE) AS coincidencias FROM cupones AND MATCH (cupon_titulocupon_descripcionAGAINST ('" . $busqueda . "' IN BOOLEAN MODEORDER BY coincidencias DESC 
Obviamente cambiando los parámetros de $busqueda

El phpmyadmin me tira:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND MATCH (cupon_titulo, cupon_descripcion) AGAINST ('asd a' IN BOOLEAN MODE) OR' at line 1
  #10 (permalink)  
Antiguo 08/01/2014, 10:32
 
Fecha de Ingreso: noviembre-2012
Mensajes: 76
Antigüedad: 11 años, 5 meses
Puntos: 3
Respuesta: Problema con MATCH AGAIST

cambia FROM cupones AND MATCH por FROM cupones WHERE MATCH
Aunque viendo el error:
AGAINST ('asd a' IN BOOLEAN MODE)
comentarte que por este método por defecto solo encuentra palabras de 4 letras o más.
  #11 (permalink)  
Antiguo 08/01/2014, 10:41
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: Problema con MATCH AGAIST

A parte de lo que dice @cybervandal

Código SQL:
Ver original
  1. SELECT *, MATCH (cupon_titulo, cupon_descripcion) AGAINST ('" . $busqueda . "' IN BOOLEAN MODE) AS coincidencias FROM cupones WHERE MATCH (cupon_titulo, cupon_descripcion) AGAINST ('" . $busqueda . "' IN BOOLEAN MODE) ORDER BY coincidencias DESC

En vez del AND va el WHERE

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #12 (permalink)  
Antiguo 08/01/2014, 10:44
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con MATCH AGAIST

Y seré curioso...
Ese "AND" puesto después de la tabla, ¿qué supone que hace allí?
Código MySQL:
Ver original
  1. SELECT *,
  2.     MATCH (cupon_titulo, cupon_descripcion)
  3.     AGAINST ('" . $busqueda . "' IN BOOLEAN MODE) AS coincidencias
  4. FROM cupones
  5.     AND MATCH (cupon_titulo, cupon_descripcion) -- ¿Por qué está ese AND?
  6.     AGAINST ('" . $busqueda . "' IN BOOLEAN MODE)
  7. ORDER BY coincidencias DESC

En todo caso debería ser WHERE:
Código MySQL:
Ver original
  1. SELECT *,
  2.     MATCH (cupon_titulo, cupon_descripcion)
  3.     AGAINST ('" . $busqueda . "' IN BOOLEAN MODE) AS coincidencias
  4. FROM cupones
  5. WHERE  MATCH (cupon_titulo, cupon_descripcion)
  6.     AGAINST ('" . $busqueda . "' IN BOOLEAN MODE)
  7. ORDER BY coincidencias DESC
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 08/01/2014, 12:04
 
Fecha de Ingreso: mayo-2009
Mensajes: 166
Antigüedad: 14 años, 11 meses
Puntos: 2
Respuesta: Problema con MATCH AGAIST

Ahora siiiiiiiiiiiiiiiiiiiiiiiiiii!!!

Etiquetas: match, select, sql, tabla, variable
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 15:20.