Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Busqueda multiple con MATCH Y AGAINST.

Estas en el tema de Busqueda multiple con MATCH Y AGAINST. en el foro de Mysql en Foros del Web. Necesito hacer un formulario de busqueda en una pagina web de zapatos, donde el usuario introduzca por ejemplo: zapatos adidas de hombres, y se muestren ...
  #1 (permalink)  
Antiguo 12/08/2012, 17:40
 
Fecha de Ingreso: agosto-2009
Ubicación: Venezuela
Mensajes: 82
Antigüedad: 14 años, 8 meses
Puntos: 0
Busqueda multiple con MATCH Y AGAINST.

Necesito hacer un formulario de busqueda en una pagina web de zapatos, donde el usuario introduzca por ejemplo: zapatos adidas de hombres, y se muestren los resultados si los hay, si no muestre el mensaje: no se encontraron resultados..

Mi formulario es:
<FORM id="busqueda" action="busqueda.php" method="POST">
<input id="buscar" type="text" name="buscar" size="30">
<input type="submit" value="Buscar" name="Buscar">
</FORM>

Mi archivo busqueda es:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Busquedas</title>
<link href="estilos.css" rel="stylesheet" type="text/css" media="screen"/>
<link rel="shortcut icon" href="img/icono.ico">
</head>

<body id="cuerpo">

<div id="superior">

<img id="logo"/>

</div><!--Fin div superior-->

<!----------DIVISION CENTRAL-------------->
<div id="central">

<div">
<h2>Tu Búsqueda</h2>
<?php
require("conexion.php");

$busqueda=$_POST['buscar'];

//Verifico que el campo no este vacio..
if ($busqueda<>''){

//Cuento el numero de palabras ingresadas
$trozos=explode(" ",$busqueda);
$numero=count($trozos);

//SI SOLO HAY UNA PALABRA DE BUSQUEDA SE ESTABLECE UNA INSTRUCION CON LIKE
if ($numero==1) {
$cadbusca="SELECT marca, modelo FROM zapatos WHERE marca LIKE '%$busqueda%' OR modelo LIKE '%$busqueda%' LIMIT 5";
}

else {

//SI HAY UNA FRASE SE UTILIZA EL ALGORTIMO DE BUSQUEDA AVANZADO DE MATCH AGAINST
$cadbusca="SELECT marca,modelo, MATCH(marca,modelo) AGAINST ('%".$busqueda."%' IN BOOLEAN MODE) AS score FROM zapatos WHERE MATCH (marca,modelo) AGAINST ('%".$busqueda."%' IN BOOLEAN MODE) ORDER BY score DESC";
}
$result=mysql_query($cadbusca);

if(mysql_num_rows($result)) {

while($row=mysql_fetch_array($result)) {
echo $row[0]." - ".$row[1]."<br>";
}
}
else {//Si no existen resultados
print("No se encontraron resultados.");
}
}
else {
print("Debe escribir una busqueda");
}
?>
</div>

</div><!--Fin div central-->

</body>
</html>

Me hace bien la busqueda cuando escribo una sola palabra, pero cuando introduzco una frase me muestra error la linea: if(mysql_num_rows($result)); entonces supongo que hay un error en la sentencia del SELECT. Cual sera el error por fa??
  #2 (permalink)  
Antiguo 12/08/2012, 18:16
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, 5 meses
Puntos: 2658
Respuesta: Busqueda multiple con MATCH Y AGAINST.

Cita:
Me hace bien la busqueda cuando escribo una sola palabra, pero cuando introduzco una frase me muestra error la linea: if(mysql_num_rows($result)); entonces supongo que hay un error en la sentencia del SELECT. Cual sera el error por fa??
Dudo que sea un "error" de la consulta.
Si hubiese un error en el SELECT, fallaría sin importar si estás buscando una palabra, varias o una frase completa. En ese sentido el error sintáctico no es selectivo: O es siempre o no lo es nunca.
Lo que si puede suceder es que el segundo caso no devuelva datos, y en ese sentido lo que tienes es un error de programación, o al menos de buena programación.
No es buena idea comprobar el numero de registros devueltos, sin antes comprobar que te haya devuelto algo. No es lo mismo.
Lo que debes hacer es primero verificar si la operación devolvió resultados, y luego cuántos son esos mismos resultados.
En cualquier caso, eso no es un asunto de MySQL, sino de PHP, y eso es otro Foro...

Nota Bene: Las normas del Foro de Bases de DAtos indican que aquí no se debe poner código de programación, sino sólo SQL.
Por favor, no postees HTML, PHP, ASP, o lo que fuere que vaya a usar. No nos dice nada, ensucia el SQL y esconde problemas de sintaxis detrás de variables, las cuales no son de MySQL, sino de PHP.
Tip final: PHP y MySQL son cosasindependientes. No necesitas MySQL para usar bases de datos en PHP, y no necesitas PHP para usar MySQL (yo incluso solo lo uso con VB.Net).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 12/08/2012 a las 19:05
  #3 (permalink)  
Antiguo 13/08/2012, 14:59
 
Fecha de Ingreso: agosto-2009
Ubicación: Venezuela
Mensajes: 82
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Busqueda multiple con MATCH Y AGAINST.

Gracias lo movere a php!

Etiquetas: match, php, select, sql, busquedas, campos
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 01:43.