Foros del Web » Programando para Internet » PHP »

Buscar combinación de dos palabras para consulta

Estas en el tema de Buscar combinación de dos palabras para consulta en el foro de PHP en Foros del Web. Hola a todos. Veamos si me explico y me podeis echar una mano. En mi web tengo un montón de especies que cuando se consultan ...
  #1 (permalink)  
Antiguo 15/01/2006, 04:36
 
Fecha de Ingreso: febrero-2004
Ubicación: Asturias
Mensajes: 171
Antigüedad: 20 años, 2 meses
Puntos: 0
Buscar combinación de dos palabras para consulta

Hola a todos.
Veamos si me explico y me podeis echar una mano.
En mi web tengo un montón de especies que cuando se consultan sale información sobre el hábitat, la descripción y otras varias cosas más. En la base de datos tengo un campo de texto (mediumtext) para la descripción o el hábitat.
Me interesa que cuando en estos campos aparezca el nombre de una especie que esté en la base de datos, en otro campo, 'especie', se cree un link hacia su pagina. Entonces seria recorrer la cadena de descripcion o habitat (por ejemplo), tomando las palabras de dos en dos, y con cada conjunto de dos palabras consecutivas hacer una consulta a la base de datos para ver si esas dos palabras se encuentran en algun registro del campo 'especie' y si es así poner el link hacia la misma.
No se si será posible tal cosa.
  #2 (permalink)  
Antiguo 15/01/2006, 08:48
Avatar de Keleriano  
Fecha de Ingreso: junio-2002
Ubicación: Granada
Mensajes: 133
Antigüedad: 21 años, 10 meses
Puntos: 0
Dudo mucho de la eficiencia de lo siguiente pero puedes probar a almacenar las especies en un vector e ir buscando coincidencias en tu campo descripción con el vector de especies.
  #3 (permalink)  
Antiguo 15/01/2006, 11:45
 
Fecha de Ingreso: agosto-2004
Mensajes: 349
Antigüedad: 19 años, 7 meses
Puntos: 3
Yo lo probaría realizando una consulta en el campo especie, y cuando saques el texto, mediante un bucle do while, hacer str_replace con los nombres de las especies y su link.

saludos!
  #4 (permalink)  
Antiguo 15/01/2006, 11:57
 
Fecha de Ingreso: febrero-2004
Ubicación: Asturias
Mensajes: 171
Antigüedad: 20 años, 2 meses
Puntos: 0
Si, las dos respuestas son buenas, pero teniendo en cuenta que hay casi 1000 especies, me inclinaría por la de sintesk7. ¿y cómo puedo recorrer una cadena tomando las palabras de dos en dos?
  #5 (permalink)  
Antiguo 16/01/2006, 02:20
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 4 meses
Puntos: 1
algoritmo borrador y algunas mejoras...

No sé si te entendí (lo que no entiendo es a qué te refieres con lo de buscar de dos en dos o más bien el por qué tiene que ser de dos en dos).

Sobre lo que te he entendido hice un algoritmo basándome mucho en lo que sintesk7 mencionó y opinando de algunas mejoras.

Antes de:

Respaldar la BD, no vaya a ser que por algún error se pierdan esos 1000 registros.

Durante (el algoritmo):

Código:
Para cada una de tus especies obtener las variables
de ($especie_actual, $especie_url)
 |
 |-consultar la BD si está $especie_actual como palabra
 | en algún registro del campo 'descripción' (con like),
 |
 |-Para cada una de las coincidencias
 | |
 | |-Obtener la descripción actual en $descripcion_actual
 | |
 | |-Reemplazar todas las coinciencias de $especie_actual
 | | por <a href="$especie_url">$especie_actual</a>
 | |
Mejoras:

* Como no tiene mucho sentido poner un link hacia la propia página que se está visualizando, podrías decir que no se hagan sustituciones en campos de la misma tupla (del mismo registro).

* Antes de realizar la sustitición, podrías comprobar que no has hecho antes ya la sustitución. Esto es útil porque si agregas nuevas especies a tu colección y aplicas el mismo algoritmo, tendrás contenidos con etiquetas duplicadas como:

"...es al igual que el <a href="puma.htm"><a href="puma.htm">puma</a></a> se ve como el felino más..."

De dos en dos palabras
Si a lo de recorrer de dos en dos palabras te refieres a que el nombre de una especie podría ser por ejemplo gallinus comelonus, entonces no te preocupes, el algoritmo funciona.
  #6 (permalink)  
Antiguo 21/01/2006, 04:58
 
Fecha de Ingreso: febrero-2004
Ubicación: Asturias
Mensajes: 171
Antigüedad: 20 años, 2 meses
Puntos: 0
Bueno, tras unos dias puedo retomar este problemilla. He escrito el siguiente código para aproximarme un poco al tema

Código PHP:
if ($row_Recordset1['Habitat']!=""
            {    
$descripcion explode(" "$row_Recordset1['Habitat']);
            
$numeropal count($descripcion);
            for (
$a=0;$a=$numeropal;$a++){
              
$b=$a+1;
        *      
$combinaciondos=$descripcion[$a]." ".$descripcion[$b];
              
$comprob sprintf("SELECT * FROM astur WHERE Especie = '".$combinaciondos."'");
        *      
$compr mysql_query($comprob$Astur) or die(mysql_error());
              
$resultadocompro mysql_fetch_assoc($compr);
              if (isset(
$resultadocompro['Especie']))
                  { 
                 
                 
$link$descripcion[$a]." ".$descripcion[$b];
                    echo 
"<a href='?Especie=$link'>$descripcion[$a] $descripcion[$b]</a>";}
                    else echo 
$descripcion[$a]." ";
            }
            
            
 } 
pero me da un error que es:
Notice: Undefined offset: 78 in C:\sokkit\site\asturnatura\Consultas\Copia de Ficha.php on line 196

Notice: Undefined offset: 79 in C:\sokkit\site\asturnatura\Consultas\Copia de Ficha.php on line 196

Fatal error: Maximum execution time of 30 seconds exceeded in C:\sokkit\site\asturnatura\Consultas\Copia de Ficha.php on line 198

marcadas con un * estan las lineas 196 y 198
  #7 (permalink)  
Antiguo 21/01/2006, 13:13
 
Fecha de Ingreso: agosto-2004
Mensajes: 349
Antigüedad: 19 años, 7 meses
Puntos: 3
Hola,

No veo la necesidad de recorrer de dos en dos todas las palabras del texto.

Ya que si tu tienes en una tabla los nombres de las especies (ej: ceratonia siliqua) al hacer el str_replace como decía en un pos anterior, ya se cambiarán los nombres de las especies por su link sin necesidad de recorrer de dos en dos las palabras.

Este método te funcionará igualmentre si usas más de 2 palabras para definir una especie (ej: Anthyllis vulneraria L. subsp. balearica)

saludos y suerte!
  #8 (permalink)  
Antiguo 21/01/2006, 13:41
 
Fecha de Ingreso: febrero-2004
Ubicación: Asturias
Mensajes: 171
Antigüedad: 20 años, 2 meses
Puntos: 0
No acabo de entender lo del str_replace. ¿No habria que recorrer de todas formas la cadena buscando las palabras de dos en dos para hacer la consulta?
  #9 (permalink)  
Antiguo 21/01/2006, 14:50
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 4 meses
Puntos: 1
no te preocupes

No te preocupes por recorrer la cadena.

Veo que están pensando como si estuvieras programando en lenguaje C. Sí hay que recorrerla, pero la función str_replace recorrerá el texto por ti y en donde se encuentre la palabra o grupo de palabras que tú le digas, entonces reemplazará con otra cadena.
  #10 (permalink)  
Antiguo 21/01/2006, 16:47
 
Fecha de Ingreso: febrero-2004
Ubicación: Asturias
Mensajes: 171
Antigüedad: 20 años, 2 meses
Puntos: 0
Muchas gracias por vuestra ayuda, es mucho más sencillo aunque al principio no entendiera ya que nunca habia usado esa funcion. Saludos
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 09:02.