Foros del Web » Programando para Internet » PHP »

Busqueda por cada una de las palabras que se introuducen

Estas en el tema de Busqueda por cada una de las palabras que se introuducen en el foro de PHP en Foros del Web. Hola amigos como estais, Vereis necesito hacer varias busquedas en la base de datos de una cadena os explico, si por ejemplo metemos "ropa de ...
  #1 (permalink)  
Antiguo 08/07/2013, 03:10
 
Fecha de Ingreso: marzo-2007
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 4
Busqueda por cada una de las palabras que se introuducen

Hola amigos como estais,

Vereis necesito hacer varias busquedas en la base de datos de una cadena os explico, si por ejemplo metemos "ropa de niños infantil", necesitaria que primero hiciese una busqueda de la cadena completa y despues de "ropa", despues de "ropa de", despues de "ropa de niños" y despues de "ropa de niños infantil"

Y si en cada busqueda encuentra algo al final me lo muestre todo junto.

He pensado en hacerlo de este modo con explode:

Código PHP:
$palabras 'ropa de niño infantil';


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


$i=0;
while (
$i count ($cad) ) {
    print 
utf8_decode($cad[$i]);
    print 
'<br />';
    
$i++;

La cosa es no se como puedo hacer para que si encuentra en la primera busqueda algun resultado lo almacene para mostrarlo al final todos juntos.

A ver si alguien tiene una idea.

Un saludo amigos!!
  #2 (permalink)  
Antiguo 08/07/2013, 03:14
 
Fecha de Ingreso: agosto-2011
Ubicación: Santo Domingo
Mensajes: 487
Antigüedad: 12 años, 8 meses
Puntos: 31
Respuesta: Busqueda por cada una de las palabras que se introuducen

solo bastatia con que en la consulta colocaras "%ropa de niños%"
__________________
El talento se educa en la KARMA y el carácter en la tempestad.
Gabriel De Los Santos
  #3 (permalink)  
Antiguo 08/07/2013, 03:57
 
Fecha de Ingreso: marzo-2007
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 4
Respuesta: Busqueda por cada una de las palabras que se introuducen

Hola amigo que tal, primeramente gracias por tu atencion,

Te explico en las multibusquedas que hace tambien va pasando las palabras a plural talque asi:

Primero buscaria el total:ropa de niños infantil
Segunda busqueda: ropas
Tercera : ropas niños
cuarta busqueda ropas niños infantiles.

Enrtonces la cosa es como podria hacer que en el resultado de esas cuantro busqueda los resultados apareciesen todos juntos.

Un saludo amigo y gracias de nuevo!
  #4 (permalink)  
Antiguo 08/07/2013, 03:59
 
Fecha de Ingreso: agosto-2011
Ubicación: Santo Domingo
Mensajes: 487
Antigüedad: 12 años, 8 meses
Puntos: 31
Respuesta: Busqueda por cada una de las palabras que se introuducen

A ver, como estas haciendo la consulta? postea tu codigo
__________________
El talento se educa en la KARMA y el carácter en la tempestad.
Gabriel De Los Santos
  #5 (permalink)  
Antiguo 08/07/2013, 04:37
 
Fecha de Ingreso: marzo-2007
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 4
Respuesta: Busqueda por cada una de las palabras que se introuducen

Hola nuevo,

Te pego el codigo con la consulta, faltaria solo la funcion que pasa a plural pero no nos afecta:

Código PHP:
Ver original
  1. $palabras = 'ropa de niño infantil';
  2.  
  3.  
  4.     $cad = $palabras;
  5.     $cad=explode(' ',$cad);
  6.  
  7.  
  8. $i=0;
  9. while ($i < count ($cad) ) {
  10.  
  11.  
  12.     $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 '".$cad[$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 '%".$cad[$i]."%' or eln.descripcion  like '%".$cad[$i]."%')  or (eln.descripcion like '%".$cad[$i]."%' or eln.descripcion like '%".$cad[$i]."%')) and eln.id_provincias =14 and eln.activo=1 ))";
  13.    
  14.     $resultado_fila = mysql_query($consulta_fila);  
  15.  
  16.     while ($ultimo_fila = mysql_fetch_array($resultado_fila)){ 
  17.  
  18.         echo '<div style=" border-bottom:solid 1px #0094d6; border-top:solid 1px #a6d3e7; padding:20px 20px 20px 30px; background: -webkit-linear-gradient(#FFFFFF, #EFEFEF); background: -moz-linear-gradient(#FFFFFF, #EFEFEF); background: -o-linear-gradient(#FFFFFF, #EFEFEF); background: linear-gradient(#FFFFFF, #EFEFEF); ">';
  19.  
  20.         echo '<img src="logo_negocios/'.$ultimo_fila['id'].'/'.$ultimo_fila['logo'].'" style="max-width:150px;">';
  21.  
  22.         echo '<p style="font-size:14pt; line-height:10px; color:#00aef4;">'.utf8_encode($ultimo_fila['nombre_direccion']).'</p><span style="font-size:8pt; line-height:17pt; color:#000000;">'.utf8_encode($ultimo_fila['direccion']).'<br>'.$ultimo_fila['cp'].' '.utf8_encode($ultimo_localidad['localidad']).' - '.$ultimo_fila['telefono'].'<br></span>'.$ultimo_fila['email_direccion'].' - '.$ultimo_fila['web'];
  23.  
  24.         echo '</div>';
  25.    
  26.     }
  27.     $i++;
  28. }

Un saludo amigo y de nuevo gracias!!
  #6 (permalink)  
Antiguo 08/07/2013, 05:29
 
Fecha de Ingreso: julio-2010
Mensajes: 275
Antigüedad: 13 años, 9 meses
Puntos: 21
Respuesta: Busqueda por cada una de las palabras que se introuducen

Yo hago esas consultas a través de ajax con jquery y php, donde se especifica el evento de cuando se presiona una tecla se consulte a la base de datos cualquier combinación de palabras de un registro de la base de datos.
  #7 (permalink)  
Antiguo 08/07/2013, 12:15
 
Fecha de Ingreso: marzo-2007
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 4
Respuesta: Busqueda por cada una de las palabras que se introuducen

Amigos este es el codigo que tengo con la funcion para los plurales:

Código PHP:
Ver original
  1. $palabras = 'ropa de niño infantil';
  2.  
  3.  
  4.     $cad = $palabras;
  5.     $cad=explode(' ',$cad);
  6.  
  7.  
  8. $i=0;
  9. while ($i < count ($cad) ) {
  10.  
  11. //echo substr($cad[$i], -1);
  12. //print '<br />';
  13. //print utf8_decode($cad[$i]);
  14. //print '<br />';
  15.  
  16.     $i++;
  17.  
  18.     if(substr($cad[$i], -1) == 'a' OR substr($cad[$i], -1) == 'e' OR substr($cad[$i], -1) == 'o'){
  19.  
  20.     $cad[$i]= $cad[$i].'s';
  21.  
  22.     }elseif(substr($cad[$i], -1) == 'i' OR substr($cad[$i], -1) == 'u'){
  23.  
  24.     $cad[$i]= $cad[$i].'es';
  25.    
  26.     }elseif(substr($cad[$i], -1) == 'z'){
  27.  
  28.     $cad[$i] = $cad[$i] = substr($cad[$i], 0, -1).'ces';
  29.  
  30.     }elseif(substr($cad[$i], -1) == 'y'){
  31.  
  32.         if(substr($cad[$i], -1) == 'jersey'){
  33.  
  34.             $cad[$i] = 'jerseis';
  35.  
  36.         }else{
  37.  
  38.             $cad[$i] = $cad[$i].'es';
  39.         }
  40.  
  41.     }elseif(substr($cad[$i], -1) == 's' OR substr($cad[$i], -1) == 'x'){
  42.  
  43.  
  44.         $cad[$i] = $cad[$i];
  45.  
  46.     }else{
  47.  
  48.         $cad[$i] = $cad[$i].'es';
  49.     }
  50.     print utf8_decode($cad[$i]);
  51.     print '<br />';

Hay dos cosas no se por que no me combierte la primera palabra, y tampoco se por que una vez convertidas todas muestra "es" de manera infinita en el navegador.

A ver si alguien ve algo.

Un saludo!!
  #8 (permalink)  
Antiguo 08/07/2013, 12:34
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
si estas buscando dentro de un campo text usar like u otro operador no se aconseja checa este post

http://blog.unijimpe.net/busquedas-fulltext-en-mysql/

http://www.fabio.com.ar/959
__________________
gerardo

Última edición por Triby; 08/07/2013 a las 12:56
  #9 (permalink)  
Antiguo 08/07/2013, 14:29
 
Fecha de Ingreso: marzo-2007
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 4
Respuesta: Busqueda por cada una de las palabras que se introuducen

Gracias, por el link amigo, me lo apunto y modifico,

Ahora mismo estoy a ver si me sale, tal como tengo el codigo me detecta las palabras pero no se por que me esta repitiendo infinitas veces cuando encuentra "de"

A ver si pueden ver algo:

Código PHP:
Ver original
  1. $palabras = 'ropa de niño infantil';
  2.  
  3.  
  4.     $cad = $palabras;
  5.     $cad=explode(' ',$cad);
  6.  
  7.  
  8. $i=0;
  9. while ($i < count ($cad) ) {
  10.  
  11. //echo substr($cad[$i], -1);
  12. //print '<br />';
  13. //print utf8_decode($cad[$i]);
  14. //print '<br />';
  15.  
  16. $req = "Select descripcion FROM nopalabras";
  17.  
  18.  
  19.  
  20. //$req = "select ela.descripcion, elp.descripcion, ed.nombre FROM empresas_listas_articulos2 ela, empresas_listas_platos2 elp, empresas_direcciones ed WHERE ela.descripcion like '".$_REQUEST['term']."%' or  elp.descripcion like '".$_REQUEST['term']."%' or ed.nombre like '".$_REQUEST['term']."%'";
  21.  
  22. //$req = "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 '".$_REQUEST['term']."%' or ela.descripcion like '".$_REQUEST['term']."%')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 '%".$_REQUEST['term']."%' or eln.descripcion  like '%".$_REQUEST['term']."%')  or (eln.descripcion like '%".$_REQUEST['term']."%' or eln.descripcion like '%".$_REQUEST['term']."%')) and eln.id_provincias =14 and eln.activo=1 ))";
  23.  
  24. //$req = "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 '".$_REQUEST['term']."%' OR ELA.DESCRIPCION LIKE '".$_REQUEST['term']."%')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 '%".$_REQUEST['term']."%' OR ELN.DESCRIPCION  like '%".$_REQUEST['term']."%')  OR (ELN.DESCRIPCION like '%".$_REQUEST['term']."%' OR ELN.DESCRIPCION LIKE '%".$_REQUEST['term']."%')) AND ELN.ID_PROVINCIAS =14 AND ELN.ACTIVO=1 )) ORDER BY NEWID()";
  25.  
  26. //$req = "Select id, descripcion FROM empresas_listas_articulos2 WHERE descripcion LIKE '".$_REQUEST['term']."%'";
  27.  
  28. $query = mysql_query($req);
  29.  
  30. $control = '0';
  31.  
  32. while($row = mysql_fetch_array($query)){
  33.  
  34.  
  35.  
  36.     if(strtolower($row['descripcion']) == $cad[$i]){
  37.  
  38.         $control = '1';
  39.         echo $cad[$i];
  40.  
  41.     }
  42. }
  43.  
  44.  
  45. if($control != '1'){
  46.  
  47.     if(substr($cad[$i], -1) == 'a' OR substr($cad[$i], -1) == 'e' OR substr($cad[$i], -1) == 'o'){
  48.  
  49.     $cad[$i]= $cad[$i].'s'; $control = '1';
  50.  
  51.     }elseif(substr($cad[$i], -1) == 'i' OR substr($cad[$i], -1) == 'u'){
  52.  
  53.     $cad[$i]= $cad[$i].'es';$control = '1';
  54.    
  55.     }elseif(substr($cad[$i], -1) == 'z'){
  56.  
  57.     $cad[$i] = $cad[$i] = substr($cad[$i], 0, -1).'ces';$control = '1';
  58.  
  59.     }elseif(substr($cad[$i], -1) == 'y'){
  60.  
  61.         if(substr($cad[$i], -1) == 'jersey'){
  62.  
  63.             $cad[$i] = 'jerseis';$control = '1';
  64.  
  65.         }else{
  66.  
  67.             $cad[$i] = $cad[$i].'es';$control = '1';
  68.         }
  69.  
  70.     }elseif(substr($cad[$i], -1) == 's' OR substr($cad[$i], -1) == 'x'){
  71.  
  72.  
  73.         $cad[$i] = $cad[$i];$control = '1';
  74.  
  75.     }else{
  76.  
  77.         $cad[$i] = $cad[$i].'es';$control = '1';
  78.     }
  79.     print utf8_decode($cad[$i]);
  80.     print '<br />';
  81.     $i++;
  82. $control = '1';
  83.  
  84. }
  85. }

Un saludo amigo!!
  #10 (permalink)  
Antiguo 08/07/2013, 14:53
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Respuesta: Busqueda por cada una de las palabras que se introuducen

recuerda que tienes que crear los indices en los campos que se hara la busqueda a full tex
__________________
gerardo
  #11 (permalink)  
Antiguo 08/07/2013, 14:54
 
Fecha de Ingreso: julio-2010
Mensajes: 275
Antigüedad: 13 años, 9 meses
Puntos: 21
Respuesta: Busqueda por cada una de las palabras que se introuducen

Código Javascript:
Ver original
  1. $req = "Select descripcion FROM nopalabras WHERE descripcion LIKE %'".$cad."'%";

Para la comparación deberías hacer algo parecido a lo escribí...
  #12 (permalink)  
Antiguo 08/07/2013, 14:57
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Respuesta: Busqueda por cada una de las palabras que se introuducen

nop cuando creas indices en full text para que la busqueda sea funcional

crear el índice:
ALTER TABLE notas ADD FULLTEXT(titulo, cuerpo);


ahí se crea el índice para la búsqueda

Buscamos así:

SELECT * FROM notas
WHERE MATCH(titulo, cuerpo) AGAINST ('Paleta')


Cita:
Iniciado por Sirrohan Ver Mensaje
Código Javascript:
Ver original
  1. $req = "Select descripcion FROM nopalabras WHERE descripcion LIKE %'".$cad."'%";

Para la comparación deberías hacer algo parecido a lo escribí...
__________________
gerardo
  #13 (permalink)  
Antiguo 08/07/2013, 14:58
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Respuesta: Busqueda por cada una de las palabras que se introuducen

olvita del like ya no es funcional para lo que estas haciendo solo en caso de que la palabra sea menor a 3 caracteres el macht funciona siempre y cuando el minimo sean 4 caracteres
Cita:
Iniciado por chalchis Ver Mensaje
nop cuando creas indices en full text para que la busqueda sea funcional

crear el índice:
ALTER TABLE notas ADD FULLTEXT(titulo, cuerpo);


ahí se crea el índice para la búsqueda

Buscamos así:

SELECT * FROM notas
WHERE MATCH(titulo, cuerpo) AGAINST ('Paleta')
__________________
gerardo

Etiquetas: busqueda, cada, palabras
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 05:09.