Foros del Web » Programando para Internet » PHP »

Búsquedas NO exactas

Estas en el tema de Búsquedas NO exactas en el foro de PHP en Foros del Web. Ante todo pedir disculpas por si el tema es más sql que php. Tengo este código para un buscador: <?php if(isset($_POST['enviar'])) { $query = "SELECT ...
  #1 (permalink)  
Antiguo 20/12/2009, 13:43
 
Fecha de Ingreso: febrero-2008
Mensajes: 120
Antigüedad: 16 años, 2 meses
Puntos: 1
Búsquedas NO exactas

Ante todo pedir disculpas por si el tema es más sql que php.

Tengo este código para un buscador:

<?php
if(isset($_POST['enviar'])) {

$query = "SELECT id,nav_denominacion,nav_titularidad from tabla WHERE `{$_POST['campo']}` LIKE '%{$_POST['palabra']}%' ";
$result = mysql_query($query,$conn);
$found = false; // Si el query ha devuelto algo pondrá a true esta variable
if($_POST['palabra']=='') {echo "No ha especificado ningun termino";} else {
while ($row = mysql_fetch_array($result)) {
$found = true;
echo "<p>Resultados que contienen el t&eacute;rmino $_POST[palabra] </p> ";
echo "<p>";
echo $row['id'];
echo $row['nav_denominacion'];
echo "</p>";
}
if(!$found) {echo "No se encontr&oacute; la palabra introducida";}
}
}


El LIKE me halla términos exactament iguales a $palabra, hasta ahí bien, pero mi intención es que me haga un hallazgo similar, no exacto. Ejemplo, si en mi bbdd tengo "acénto", me halla "acénto", pero no "acento".

Esto con los acentos, pero mi inteción es que también me encuentre "hallazgo", cuando busco "allazgo".

Alguna sugerencia?

Muchas gracias.
  #2 (permalink)  
Antiguo 20/12/2009, 13:45
 
Fecha de Ingreso: febrero-2008
Mensajes: 120
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Búsquedas NO exactas

(perdon olvidé suscribirme)
  #3 (permalink)  
Antiguo 20/12/2009, 14:12
Avatar de dggluz  
Fecha de Ingreso: abril-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 525
Antigüedad: 15 años
Puntos: 50
Respuesta: Búsquedas NO exactas

Sí tendría que encontrarte "allazgo", porque le pusiste el símbolo "%" al comienzo de la búsqueda (http://dev.mysql.com/doc/refman/5.5/...#operator_like). De todos modos, para el tema de los acentos puedes usar expresiones regulares o búsquedas sobre campos FULL TEXT (que además te permite indexar según relevancia) u otras que nunca probé como SOUNDEX o SOUND LIKE. Pero todas esas opciones te complican un poco el código. ¡Suerte!
  #4 (permalink)  
Antiguo 20/12/2009, 17:30
 
Fecha de Ingreso: febrero-2008
Mensajes: 120
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Búsquedas NO exactas

Cierto, me encuentra "allazgo" por formar parte de la cadena "hallazgo" pero al revés no me encuentra.

He probado soundex y quizá sea un fallo de sintaxis, pero no me funciona.

Lo de las expresiones regulares...te refieres a usar str_replace?

puedes ampliar un poco mas la info acerca de ello?

gracias!
  #5 (permalink)  
Antiguo 20/12/2009, 17:53
 
Fecha de Ingreso: febrero-2008
Mensajes: 120
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Búsquedas NO exactas

por cierto tengo los campos en utf-general-ci, no se si eso influye tambien
  #6 (permalink)  
Antiguo 20/12/2009, 17:57
Avatar de dggluz  
Fecha de Ingreso: abril-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 525
Antigüedad: 15 años
Puntos: 50
Respuesta: Búsquedas NO exactas

No, me refería a usar REGEXP en la consulta SQL. Primero, lees la cadena que te piden buscar desde PHP, y con algún algoritmo (que lo tienes que idear tú) creas una expresión regular que represente a esa cadena con o sin acentos (ahí sí quizás usaría str_replace). Por otro lado, si se busca "hallaz" también tendría que encontrar "hallazgo" si usas los "%" también al final. ¡Suerte!
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 21:24.