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

Busqueda efectiva sql

Estas en el tema de Busqueda efectiva sql en el foro de Mysql en Foros del Web. Hola Quiero realizar una busqueda en una celda concreta de una tabla. Yo lo he hecho así SELECT * FROM `productos` WHERE `nombre` LIKE '%$variable%' ...
  #1 (permalink)  
Antiguo 21/06/2012, 05:58
 
Fecha de Ingreso: marzo-2009
Mensajes: 395
Antigüedad: 15 años, 8 meses
Puntos: 11
Busqueda efectiva sql

Hola

Quiero realizar una busqueda en una celda concreta de una tabla.

Yo lo he hecho así

SELECT * FROM `productos` WHERE `nombre` LIKE '%$variable%'


si por ejemplo tengo puesto en esa celda un valor como tomate frito, realizando criterios de búsqueda como

tomate, frito, toma, te frito, si me da el resultado esperado, sacando tomate frito como resultado (a parte del resto de celdas como id, peso...)

EL problema está en que si busco cosas como toma frito, ya no encuentra nada. He probado a buscar toma%frito, pero tampoco me produce el resulatdo deseado.

¿Alguna mejora a implementar en mi código?
  #2 (permalink)  
Antiguo 21/06/2012, 06:08
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Busqueda efectiva sql

12.3.1. Funciones de comparación de cadenas de caracteres

Cita:
mysql> SELECT 'David!' LIKE '%D%v%';
-> 1 True
% Cero o n caracteres...

Esto es lo que hay...

$variable="toma frito" luego la query será

%toma frito% siempre será distinto de "tomate frito"

Si $variable="toma%frito" luego la query será

%toma%frito% debería encontrar "tomate frito" puesto que "te " concuerda con %
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 21/06/2012, 08:33
 
Fecha de Ingreso: marzo-2009
Mensajes: 395
Antigüedad: 15 años, 8 meses
Puntos: 11
Respuesta: Busqueda efectiva sql

Entonces con hacer un script que cambie los espacios en blanco por un % valdría no?

Gracias

Que opinión te merece el match against?
  #4 (permalink)  
Antiguo 21/06/2012, 08:37
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Busqueda efectiva sql

Hola Gothgauss:

Complementando el comentario de quimfv, dependiendo del tipo de tablas que estés utilizando podrías considerar utilizar búsquedas de texto completo:

http://dev.mysql.com/doc/refman/5.0/...xt-search.html

Este tipo de búsquedas es mucho más flexible que utilizar LIKE, aunque pueden usarse sólo con tablas MyISAM. De cualquier manera te recomiendo que le des un vistazo a la liga que te puse.

Otra opción, aunque bastante costosa en cuanto a rendimiento, es que separes tu cadena y busques cada palabra de manera individual, es decir algo como esto:

Código MySQL:
Ver original
  1. SELECT * FROM productos
  2.   nombre LIKE '%toma%' and
  3.   nombre LIKE '%frito%'

Esto te permitiría obtener resultados independientemente de la posición de las palabras, es decir podrías poner "frito tomate" o "tomate frito" y ambas regresarían resultados.

Saludos
Leo.
  #5 (permalink)  
Antiguo 21/06/2012, 11:33
 
Fecha de Ingreso: marzo-2009
Mensajes: 395
Antigüedad: 15 años, 8 meses
Puntos: 11
Respuesta: Busqueda efectiva sql

Si no entiendo mal es de la forma

SELECT * FROM productos WHERE MATCH (nombre) AGAINST ('$variable')


Es mejor este método o hacer un script que separe los espacios en blanco por %, de tal modo que busque de la forma:



SELECT * FROM productos WHERE 'nombre' LIKE '%toma%frito%'
  #6 (permalink)  
Antiguo 21/06/2012, 11:45
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Busqueda efectiva sql

Hola de nuevo:

Las condiciones LIKE '%algo%', son junto con las condiciones IN las que peor desempeño tienen, ya que necesitan evaluar de manera exhaustiva los registros para encontrar todas las ocurrencias del patrón a buscar. Es por eso que en cualquier manual de buenas prácticas de SQL encontraras que te piden que evites este tipo de comparaciones, o en su defecto al menos trates de minimizar su uso. Los operadores MATCH y AGANIST están diseñados justamente para optimizar búsquedas de textos, pero como te dije en un principio, estás sólo aplican sobre tablas MyISAM. En lo particular considero que cuando estás hablando de buscadores la mejor opción es MATCH-AGANIST, pero cuando se trata de consultas aisladas tienes pocos registros en tus tablas puedes utilizar LIKE.

Saludos
Leo.
  #7 (permalink)  
Antiguo 21/06/2012, 15:53
 
Fecha de Ingreso: marzo-2009
Mensajes: 395
Antigüedad: 15 años, 8 meses
Puntos: 11
Respuesta: Busqueda efectiva sql

Me ha parecido muy útil tu información.

Creo que sí puedo utilizar tablas MYASIm aunque no se que ventajas/desventajas tienen respecto a otro tipo de tablas.

Un saludo

Etiquetas: select, sql, tabla, busquedas
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 13:45.