Foros del Web » Programando para Internet » PHP »

Problemas con buscador

Estas en el tema de Problemas con buscador en el foro de PHP en Foros del Web. El código del buscador es el siguiente: <?php require("dbconnectp.inc.php"); if ($busqueda<>'') { $trozos=explode(" ",$busqueda); $numero=count($trozos); if ($numero==1) { $cadbusca="SELECT * FROM inmueble WHERE tipo_inmueble LIKE ...
  #1 (permalink)  
Antiguo 11/06/2005, 14:36
Avatar de Pandora  
Fecha de Ingreso: mayo-2005
Mensajes: 17
Antigüedad: 12 años, 6 meses
Puntos: 0
Exclamación Problemas con buscador

El código del buscador es el siguiente:
<?php
require("dbconnectp.inc.php");
if ($busqueda<>'')
{
$trozos=explode(" ",$busqueda);
$numero=count($trozos);
if ($numero==1)
{
$cadbusca="SELECT * FROM inmueble WHERE tipo_inmueble LIKE '%$busqueda%' OR ciudad LIKE '%$busqueda%' OR zona LIKE '%$busqueda%' OR operacion LIKE '%$busqueda%' OR des_corta LIKE '%$busqueda%' OR des_larga LIKE '%$busqueda%' OR precio LIKE '%$busqueda%'LIMIT 50";
}
if ($numero>1)
{
$cadbusca="SELECT *, MATCH (tipo_inmueble, ciudad, zona, operacion, des_corta, des_larga, precio) AGAINST ('$busqueda') AS Score FROM ARTICULOS WHERE MATCH ( tipo_inmueble, ciudad, zona, operacion, des_corta, des_larga, precio) AGAINST ('$busqueda') ORDER BY Score DESC LIMIT 50";
}
$consulta=mysql_query($cadbusca,$conexion) or die("Muere consulta Muere");
While ($registro=mysql_fetch_assoc($consulta))
{
$tipo_inmueble=$registro['tipo_inmueble'];
$ciudad=$registro['ciudad'];
$zona=$registro['zona'];
$operacion=$registro['operacion'];
$corta=$registro['des_corta'];
$larga=$registro['des_larga'];
$precio=$registro['precio'];
echo $tipo_inmueble." - ".$ciudad."<br>";
}
}
?>

Funciona bien cuando al buscar sólo le mando una palabra, por ejemplo si busco los pisos en "Sevilla", me los encuentra, pero si pongo "Sevilla Alcalá" no me puede ejecutar la consulta. No sé cuál es el problema, ¿puede ser la select? Ayudadme. Porfa.
  #2 (permalink)  
Antiguo 11/06/2005, 15:33
 
Fecha de Ingreso: febrero-2005
Mensajes: 29
Antigüedad: 12 años, 9 meses
Puntos: 0
Chequea si ya hiciste el ALTER TABLE sobre los campos de tu tabla que vas a utilizar como índices para la búsqueda con MATCH ... AGAINST, y si no lo has echo es por ésta razon que éste tipo de consulta no te corre, si no sabes como hacerlo aqui te dejo el código SQL para que lo hagas:

ALTER TABLE nombre_tabla ADD FULLTEXT(campo1, campo2);

espro te halla ayudado, hasta luego linda.
  #3 (permalink)  
Antiguo 11/06/2005, 18:09
Avatar de gildus  
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 14 años, 4 meses
Puntos: 105
Holas,

Código PHP:
<?php
require("dbconnectp.inc.php");
if (!empty(
$busqueda!))
{    
$trozos=explode(" ",$busqueda);
    
$numero=count($trozos);
    if (
$numero==1)
    {    
$cadbusca="SELECT * FROM inmueble WHERE tipo_inmueble LIKE '%$busqueda%' OR ciudad LIKE '%$busqueda%' OR zona LIKE '%$busqueda%' OR operacion LIKE '%$busqueda%' OR des_corta LIKE '%$busqueda%' OR des_larga LIKE '%$busqueda%' OR precio LIKE '%$busqueda%'LIMIT 50";
    }
    if (
$numero>1)
    {    
$cadbusca="SELECT *, MATCH (tipo_inmueble, ciudad, zona, operacion, des_corta, des_larga, precio) AGAINST ('$busqueda') AS Score FROM ARTICULOS WHERE MATCH ( tipo_inmueble, ciudad, zona, operacion, des_corta, des_larga, precio) AGAINST ('$busqueda') ORDER BY Score DESC LIMIT 50";
    }
    
$consulta=mysql_query($cadbusca,$conexion) or die("Muere consulta Muere");
    while (
$registro=mysql_fetch_assoc($consulta))
    {    
$tipo_inmueble=$registro['tipo_inmueble'];
        
$ciudad=$registro['ciudad'];
        
$zona=$registro['zona'];
        
$operacion=$registro['operacion'];
        
$corta=$registro['des_corta'];
        
$larga=$registro['des_larga'];
        
$precio=$registro['precio'];
        echo 
$tipo_inmueble." - ".$ciudad."<br>";
    }
}
?>

Las columnas que colocas en tu consulta en la parte "..MATCH (tipo_inmueble, ciudad, zona, operacion, des_corta, des_larga, precio) .."
tienes que colocarles el tipo de columna con la propiedad FULLTEXT, eso es lo que te falta, .


Saludos, .
Gildus
__________________
.: Gildus :.
  #4 (permalink)  
Antiguo 12/06/2005, 11:04
Avatar de Pandora  
Fecha de Ingreso: mayo-2005
Mensajes: 17
Antigüedad: 12 años, 6 meses
Puntos: 0
Eso de ALTER TABLE inmueble ADD FULLTEXT(tipo_inmueble, ciudad, zona, operacion, des_corta, des_larga, precio) que significa exactamente... ¿¿¿Qué es lo que hace con la BD???
  #5 (permalink)  
Antiguo 12/06/2005, 11:58
Avatar de gildus  
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 14 años, 4 meses
Puntos: 105
Hola, ALTER TABLE modifica tu tabla inmueble, y lo que en este caso le estarias modificando es aumentarle lo que te dije la propiedad de indice FULLTEXT para que se realice las busquedas completas en tales campos.

Chekeate estos links:
http://dev.mysql.com/doc/mysql/en/alter-table.html
http://dev.mysql.com/doc/mysql/en/fulltext-search.html

Saludos
Gildus
__________________
.: Gildus :.
  #6 (permalink)  
Antiguo 13/06/2005, 05:50
Avatar de Pandora  
Fecha de Ingreso: mayo-2005
Mensajes: 17
Antigüedad: 12 años, 6 meses
Puntos: 0
Pasa olimpicamente de la select

Ya le he puesto a la tabla
ALTER TABLE ... FULLTEXT... y pasa olímpicamente de la select match... si la lee y todo, incluso la ejecuta, pero no obtiene ningún resultado, es como si no encontrara registros en la tabla correspondientes a la select, pero la tabla si los tiene.
¿Está bien la sentencia alter table? Ya estoy desesperada.
Por favor ayudadme

Esta es my sentencia SQL
CREATE DATABASE inmobiliaria;
USE inmobiliaria;
CREATE TABLE inmueble (
cod_inmueble int(11) unsigned NOT NULL auto_increment,
cod_usuario int(11) NOT NULL,
tipo_inmueble varchar(20),
ciudad varchar(60),
zona varchar(255),
operacion varchar(20),
referencia varchar(100),
des_corta varchar(255),
des_larga text,
foto_binario blob NOT NULL,
foto_nombre varchar(255) default '',
foto_peso varchar(15) default '',
foto_tipo varchar(25) default '',
precio varchar(100),
PRIMARY KEY (cod_inmueble)
);

ALTER TABLE inmueble ADD FULLTEXT(tipo_inmueble, ciudad, zona, operacion, des_corta, des_larga, precio);

Escribidme a mi correo [email protected] o a mi msn [email protected]
  #7 (permalink)  
Antiguo 13/06/2005, 19:07
Avatar de gildus  
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 14 años, 4 meses
Puntos: 105
Hola Pandora,

Cambia y prueba con este codigo que si me funciono aqui:

Código PHP:
           if ($busqueda<>'')
       {
         
$trozos=explode(" ",$busqueda);
    
         
$numero=count($trozos);
         if (
$numero==1)
         {
        
$cadbusca="SELECT * FROM inmueble WHERE tipo_inmueble LIKE '%$busqueda%' OR ciudad LIKE '%$busqueda%' OR zona LIKE '%$busqueda%' OR operacion LIKE '%$busqueda%' OR des_corta LIKE '%$busqueda%' OR des_larga LIKE '%busqueda%' OR precio LIKE '%$busqueda%' LIMIT 50";
         }
         elseif (
$numero>1)
         {
            
$cadbusca="SELECT *, MATCH(tipo_inmueble, ciudad, zona, operacion, des_corta, des_larga, precio) AGAINST('".$busqueda."' IN BOOLEAN MODE) AS Score FROM inmueble WHERE MATCH(tipo_inmueble, ciudad, zona, operacion, des_corta, des_larga, precio) AGAINST('".$busqueda."' IN BOOLEAN MODE) ORDER  BY Score DESC LIMIT 50";
         }
         echo 
"$cadbusca<br><br>";
         
$consulta=mysql_query($cadbusca,$dblink) or die ("Error en la consulta");
         
$nfilas mysql_num_rows ($consulta);
        if (
$nfilas >0)
        {
        for (
$i=0;$i<$nfilas;$i++)
         {
          
$j++;
          
$registro mysql_fetch_array ($consulta);
          echo 
"<TD><center>";
          echo 
"<br>";
          echo 
"<img src=\"thumbnail.php?id=".$registro['cod_inmueble']."\">";
          echo 
"<br>";
          echo 
"<br> ".$registro['tipo_inmueble'];
          echo 
"<br> Ciudad: ".$registro['ciudad'];
          echo 
"<br> Poblacion: ".$registro['zona'];
          echo 
"<br> Para ".$registro['operacion'];
          echo 
"<br> Referencia: ".$registro['referencia'];
          echo 
"<br> ".$registro['des_corta'];
          echo 
"<br> Descripción: ".$registro['des_larga'];
          echo 
"<br> Precio: ".$registro['precio']. " €";
          echo 
"<br>";
          echo 
"<br>";
          echo 
"</center></TD>";
          if (
$j%2==0) echo "</TR>";
           }
        }
        else
        {
         echo 
"<TD><center><h1> No hay resultados encontrados en ésta búsqueda</h1></center></TD></TR>";
        }
       } 

Date cuenta en el SQL:
Código PHP:

$cadbusca
="SELECT *, MATCH(tipo_inmueble, ciudad, zona, operacion, des_corta, des_larga, precio) AGAINST('".$busqueda."' IN BOOLEAN MODE) AS Score FROM inmueble WHERE MATCH(tipo_inmueble, ciudad, zona, operacion, des_corta, des_larga, precio) AGAINST('".$busqueda."' IN BOOLEAN MODE) ORDER  BY Score DESC LIMIT 50"
Saludos
Gildus
__________________
.: Gildus :.

Última edición por gildus; 13/06/2005 a las 19:14
  #8 (permalink)  
Antiguo 14/06/2005, 14:46
Avatar de Pandora  
Fecha de Ingreso: mayo-2005
Mensajes: 17
Antigüedad: 12 años, 6 meses
Puntos: 0
Ya no sé lo que hago mal, he puesto tu mismo código php. Y me sale el echo de la select against.. macth y No hay resultados encontrados en ésta búsqueda. Lo que me parece es que la sentencia alter table no está bien del todo. Yo creo que es así: ALTER TABLE inmueble ADD FULLTEXT(tipo_inmueble, ciudad, zona, operacion, des_corta, des_larga, precio);

Gracias y disculpad las molestias
  #9 (permalink)  
Antiguo 16/06/2005, 03:21
Avatar de Pandora  
Fecha de Ingreso: mayo-2005
Mensajes: 17
Antigüedad: 12 años, 6 meses
Puntos: 0
Después del código del buscador hay que poner algún mysql_free_result, o algo por el estilo?
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 11:03.