Foros del Web » Programando para Internet » PHP »

Busquedas modificado cada palabra al plural

Estas en el tema de Busquedas modificado cada palabra al plural en el foro de PHP en Foros del Web. Hola amigos que tal, Vereis, tengo una funcion que pasa al plurar las palabras la cosa es que necesito que si alguien busca por ejemplo ...
  #1 (permalink)  
Antiguo 11/07/2013, 09:49
 
Fecha de Ingreso: marzo-2007
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 4
Busquedas modificado cada palabra al plural

Hola amigos que tal,

Vereis, tengo una funcion que pasa al plurar las palabras la cosa es que necesito que si alguien busca por ejemplo "ropa infantil niño"

1º Haga una busqueda con "ropa infantil niño"
2º haga una busqueda con "ropas infantil niño"
3º haga una busqueda con "ropas infantiles niño"
4º haga una busqueda con "ropas infantiles niños"

La funcion que pasa al plurar es esta ademas de quitar las preposiciones:

Código PHP:
$palabras =  utf8_decode($s);

    
$cad $palabras;
    
$cad=explode(' ',$cad);



$i=0;
$c=0;


while (
$i count ($cad) ) {



$req "Select descripcion FROM nopalabras";

$x=0;


$query mysql_query($req);

$control '0';

while(
$row mysql_fetch_array($query)){



    if(
strtolower($row['descripcion']) == strtolower($cad[$i])){

        
$control '1';     

    }

 
$e =' '.strtolower($row['descripcion']).' ';
 
$ss str_ireplace($e" ",$ss); 
}


 





$cad[$i] = strtolower($cad[$i]);

echo 
$singular[$i] = strtolower($cad[$i]);

if(
$control != '1' && $x <= '0'){

 
    if(
substr($cad[$i], -1) == strtolower('a') OR substr($cad[$i], -1) == 'e' OR substr($cad[$i], -1) == strtolower('o')){

    
$cad[$i]= $cad[$i].'s'

    }elseif(
substr($cad[$i], -1) == strtolower('i') OR substr($cad[$i], -1) == strtolower('u')){

    
$cad[$i]= $cad[$i].'es';
   
    }elseif(
substr($cad[$i], -1) == strtolower('z')){

    
$cad[$i] = $cad[$i] = substr($cad[$i], 0, -1).'ces';

    }elseif(
substr($cad[$i], -1) == strtolower('y')){

        if(
$cad[$i] == 'jersey'){

            
$cad[$i] = 'jerseis';

        }else{

            
$cad[$i] = $cad[$i].'es';
        }

    }elseif(
substr($cad[$i], -1) == strtolower('s') OR substr($cad[$i], -1) == strtolower('x')){


        
$cad[$i] = $cad[$i];


    }else{

        
$cad[$i] = $cad[$i].'es';

    }

    
$cad[$i] = utf8_decode($cad[$i]);

        
$consulta_fila "select e.id, e.descuento, md.logo, m.imagen, md.nombre as nombre_general, md.web, md.email_cliente as email_misdatos, ed.id as id_direccion, ed.nombre as nombre_direccion, ed.direccion, ed.telefono, ed.id_municipios, ed.id_provincias, ed.cp, ed.email as email_direccion from empresas e left join micrositio m on e.id = m.id_empresas left join misdatos md on e.id_mis_datos = md.id left join empresas_direcciones ed on (ed.id_empresas = e.id and ed.id_provincias =14) where e.id in ((select distinct(e1.id) from empresas e1, empresas_listas_articulos ela, empresas_direcciones ed, empresas_listas el, listas l where ela.id_empresas = e1.id and ed.id_empresas = e1.id and el.id = ela.id_empresas_listas and md.id_categorias <> 14 and el.id_listas = l.id and l.activo = 1 and el.activo = 1  and ed.id_provincias =14 and (ela.descripcion like ' ".$singular[$i]." %' or ela.descripcion like ' ".$cad[$i]." %')union select distinct(eln.id_empresas) from empresas_listas_nombres eln, misdatos md where eln.id_empresas = e.id and e.id_mis_datos = md.id and md.id_categorias <> 14  and ((eln.descripcion like '% ".$singular[$i]." %' or eln.descripcion  like '% ".$singular[$i]." %')  or (eln.descripcion like '% ".$singular[$i]." %' or eln.descripcion like '% ".$cad[$i]." %')) and eln.id_provincias =14 and eln.activo=1))"
    
$c++;
    
$x++;
}   
$i++;

La cosa es que tal como esta, lo que hace es:

2º haga una busqueda con "ropas"
3º haga una busqueda con "infantiles"
4º haga una busqueda con "niños"

A ver si alguien sabe como podria hacer esto

Un saludo amigos!!
  #2 (permalink)  
Antiguo 11/07/2013, 12:21
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Busquedas modificado cada palabra al plural

Sería mucho más fácil si tu tabla usa el motor MyISAM (o InnoDB con MySQL 5.6+), crear un índice fulltext y realizas la búsqueda con MATCH AGAINST: http://blog.marceloaltmann.com/en-us...ysql-fulltext/
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 11/07/2013, 12:56
 
Fecha de Ingreso: marzo-2007
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 4
Respuesta: Busquedas modificado cada palabra al plural

Hola amigo, gracias por tu atencion

Al final lo resolvi de este modo:

Código HTML:
Ver original
  1. include_once('../conexion.php');
  2.  
  3. $i=0;
  4.  
  5.  
  6. $palabras = utf8_decode('ropa de niño cama infantil');
  7. $palabras1 = utf8_decode('ropa de niño cama infantil');
  8.  
  9.  
  10. $req = "Select descripcion FROM nopalabras";
  11.  
  12.  
  13.  
  14.  
  15. $query = mysql_query($req);
  16.  
  17.  
  18.  
  19. while($row = mysql_fetch_array($query)){
  20.  
  21.  
  22.  
  23.  
  24.  
  25.    
  26.  
  27. $e =strtolower($palabras);
  28. $palabras = str_ireplace(' '.$row['descripcion'].' ',' ' ,$e);
  29.  
  30.  
  31.  
  32.  
  33. }
  34.  
  35. //echo utf8_decode($palabras)   ;
  36.  
  37.     $cad = $palabras;
  38.     $cad=explode(' ',$cad);
  39.  
  40.     $cad1 = $palabras;
  41.     $cad1=explode(' ',$cad1);
  42.  
  43.  
  44.  
  45. while ($i < count ($cad) ) {
  46.  
  47.  if(substr($cad[$i], -1) == strtolower('a') OR substr($cad[$i], -1) == 'e' OR substr($cad[$i], -1) == strtolower('o')){
  48.  
  49.    $cad[$i]= $cad[$i].'s';
  50.  
  51.    }elseif(substr($cad[$i], -1) == strtolower('i') OR substr($cad[$i], -1) == strtolower('u')){
  52.  
  53.    $cad[$i]= $cad[$i].'es';
  54.  
  55.    }elseif(substr($cad[$i], -1) == strtolower('z')){
  56.  
  57.    $cad[$i] = $cad[$i] = substr($cad[$i], 0, -1).'ces';
  58.  
  59.    }elseif(substr($cad[$i], -1) == strtolower('y')){
  60.  
  61.        if($cad[$i] == 'jersey'){
  62.  
  63.            $cad[$i] = 'jerseis';
  64.  
  65.        }else{
  66.  
  67.            $cad[$i] = $cad[$i].'es';
  68.        }
  69.  
  70.    }elseif(substr($cad[$i], -1) == strtolower('s') OR substr($cad[$i], -1) == strtolower('x')){
  71.  
  72.  
  73.        $cad[$i] = $cad[$i];
  74.  
  75.  
  76.    }elseif(substr($cad[$i], -1) != strtolower('z')){
  77.  
  78.        $cad[$i] = $cad[$i].'es';
  79.  
  80.    }
  81.  
  82.    $sus = $cad[$i];
  83.  
  84.  
  85. if($i == 0){
  86.     echo $palabras1.'<br>';
  87. }
  88.  
  89. $palabras = str_ireplace($cad1[$i], $sus ,$palabras);
  90.     echo $palabras.'<br>';
  91.  
  92.  
  93. $i++;
  94. }
  95.  
  96. Un saludo!!
  #4 (permalink)  
Antiguo 11/07/2013, 13:19
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Busquedas modificado cada palabra al plural

Wow, recorres toda la tabla para... ups, no entendí para qué! y luego realizas la "búsqueda real"!

Es posible que funcione, pero no es la mejor forma de hacerlo cuando el motor de base de datos lo hace de forma "más natural".
__________________
- León, Guanajuato
- GV-Foto

Etiquetas: busquedas, cada, mysql, palabra, select
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 23:20.