Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Como buscar por coincidencias de palabras con mysql

Estas en el tema de Como buscar por coincidencias de palabras con mysql en el foro de Mysql en Foros del Web. Hola buenas tardes. El dia de hoy me pregunto como puedo obtimizar mi buscador para buscar palabras similares a las que estan guardadas dentro de ...
  #1 (permalink)  
Antiguo 03/01/2010, 16:01
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 6 meses
Puntos: 188
Como buscar por coincidencias de palabras con mysql

Hola buenas tardes.

El dia de hoy me pregunto como puedo obtimizar mi buscador para buscar palabras similares a las que estan guardadas dentro de la tabla mysql.

Por ejemplo

SELECT * FROM tabla WHERE campo LIKE '%valorrecibido%'

lo que sucede es que este tipo de consulta me da errores como estos:

Si dentro de la tabla Mysql tengo guardado: azul, rojo, verde, amarillo

y alguien busca por: azul, cafe, rojo entonces ya no muestra el resultado, aunque este si contenga alguno de los colores que busca el usuario.

Como puedo resolver este problema, muchas gracias.
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
  #2 (permalink)  
Antiguo 03/01/2010, 18:22
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Como buscar por coincidencias de palabras con mysql

Porque para el SQL, el contenido de un campo, por más que estén separados por commas, no componen valores distintos, en un sólo valor, y la cadena "azul, cafe, rojo" no es igual a "azul, cafe, rojo". El caracter comodin (%) sólo le dice al MySQL que puede reemplazar valores al inicio o al final en tu caso. Pero nada dice de los caracteres intermedios.
Tu problema viene por dos lados.
Por un lado muestra un serio defecto de diseño, porque tienes campos sin normalizar, ya que el que estás analizando es un campo multivaluado, lo que viola el modelo relacional (ni siquiera estaría en 1FN). Normalizar la tabla ayudaría a la hora de reconocer los valores en consultas mucho más simples de elaborar.
Por otro lado, si lo que deseas es realizar una consulta sobre varios valores, cada uno de esos valores debe ser incluido en el WHERE separadamente, usando AND u OR según se necesite. Esto implica que deberás usar más de una variable o parámetro en la consulta.
Algo así:
Código MySQL:
Ver original
  1. FROM tabla
  2.       campo LIKE '%valorrecibido1%' OR
  3.       campo LIKE '%valorrecibido2%' OR
  4.       campo LIKE '%valorrecibido3%';
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 03/01/2010, 18:28
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 6 meses
Puntos: 188
Respuesta: Como buscar por coincidencias de palabras con mysql

gracias amigo.

Por ejemplo tu me podrias ayudar a entender como funciona las consultas de palabras similares.

Es decir si yo tengo guardado el valor clan xtraordinary y el usuario consulta por clan extraordinary, entonces como se puede mostrar la consulta??

Me refiero claro a cuando las palabras tienen errores ortograficos y la busqueda encuentra similitudes con valores guardados en la DB mysql

Me podrias dar un poco de teoria amigo, muchas gracias.
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
  #4 (permalink)  
Antiguo 03/01/2010, 21:11
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Como buscar por coincidencias de palabras con mysql

Cita:
Me refiero claro a cuando las palabras tienen errores ortograficos y la busqueda encuentra similitudes con valores guardados en la DB mysql
Si hay diferencia en el patrón buscado con LIKE, simplemente no las encontrará. Para poder hallar coincidencias debe existir similitud entre el patrón buscado y el almacenado. Donde puede haber diferencias y aún así salir como resultado, es en aquellos que serán reemplazados por el comodín.
Ahora bien, si lo que deseas es una aproximación aún habiendo ciertas diferencias, debes usar REGEXP.

La inmensa mayoría de tus dudas se resolverán si simplemente lees el manual de referencia:
3.3.4.7. Coincidencia de patrones
Apéndice F. Expresiones regulares en MySQL
12.7. Funciones de búsqueda de texto completo (Full-Text)
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 04/01/2010, 02:29
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Como buscar por coincidencias de palabras con mysql

Sólo añadiría a lo dicho por gnzsoloyo que, para esos casos de errores fonéticos, pueden usarse funciones como
SOUNDEX() Y
expr1 SOUNDS LIKE expr2
mira aquí
http://dev.mysql.com/doc/refman/5.0/...functions.html

Se trata de buscar en tu tabla el registro cuyo SOUNDEX() se aproxima por arriba o por abajo más al SOUNDEX de la cadena buscada. Ciertamente está preparada para el inglés, pero ya es algo. Puedes buscar funciones parecidas en los programas con los que trabajas. En PHP sé que al menos hay 4 funciones y en la red puedes encontrar alguna adaptación al español. Pide consejo en el foro de tu programa.
  #6 (permalink)  
Antiguo 04/01/2010, 05:19
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Como buscar por coincidencias de palabras con mysql

Buen punto, jurena. Me había olvidado completamente de esa función.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 04/01/2010, 12:05
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 6 meses
Puntos: 188
Respuesta: Como buscar por coincidencias de palabras con mysql

muchas gracias a ambos, hare lo que me dicen.
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.

Etiquetas: coincidencias, 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 03:50.