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

Duda Consulta con LIKE y %

Estas en el tema de Duda Consulta con LIKE y % en el foro de Mysql en Foros del Web. Hola, estoy haciendo una pequeña web despues de 6 años sin programar nada y me surgido un pequeño problema. En la siguiente tabla: Si realizo ...
  #1 (permalink)  
Antiguo 18/03/2012, 15:23
 
Fecha de Ingreso: marzo-2012
Mensajes: 43
Antigüedad: 12 años, 1 mes
Puntos: 3
Duda Consulta con LIKE y %

Hola, estoy haciendo una pequeña web despues de 6 años sin programar nada y me surgido un pequeño problema.

En la siguiente tabla:



Si realizo esta consulta:

SELECT * FROM anuncios WHERE comentarios LIKE %usado%rojo%

no me develve nada, he comprobado que si ordeno el patron en el mismo orden que aparece en la columna si me lo encuentra, es decir con esta consulta si me devuelve el resultado

SELECT * FROM anuncios WHERE comentarios LIKE %rojo%usado%

o

SELECT * FROM anuncios WHERE comentarios LIKE %mate%nuevo%

¿Alguien sabe como tengo que hacer para que me seleccione la fila aunque las palabras que van en el LIKE no esten puestas en el mismo orden que el la tabla?

Un saludo
  #2 (permalink)  
Antiguo 18/03/2012, 15:50
 
Fecha de Ingreso: agosto-2011
Mensajes: 59
Antigüedad: 12 años, 8 meses
Puntos: 8
Respuesta: Duda Consulta con LIKE y %

pues poniendo dos condiciones

where campo like '%cond1%' and campo like '%cond2%'
  #3 (permalink)  
Antiguo 20/03/2012, 10:00
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Duda Consulta con LIKE y %

Hola keko123:

Si bien la respuesta que te da nifdya de poner dos condiciones LIKE puede resolver tu problema, no es recomendable abusar de este tipo de restricciones, ya que son terriblemente ineficientes y pueden acarrear problemas con el performance de la aplicación.

Dale un vistazo a las BÚSQUEDAS DE TEXTO COMPLETO:

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

Este tipo de búsquedas se adecua más a lo que estás tratando de implementar... además de ser mucho más versátil que el LIKE también es más eficiente.

Saludos
Leo.
  #4 (permalink)  
Antiguo 20/03/2012, 13:23
 
Fecha de Ingreso: agosto-2011
Mensajes: 59
Antigüedad: 12 años, 8 meses
Puntos: 8
Respuesta: Duda Consulta con LIKE y %

Cierto, es que yo utilizo innodb (por las transacciones) y de ese modo no se puede utilizar. Por eso no estoy acostumbrada.
Y totalmente de acuerdo con que el like es algo que se debe evitar
  #5 (permalink)  
Antiguo 21/03/2012, 06:20
 
Fecha de Ingreso: marzo-2012
Mensajes: 43
Antigüedad: 12 años, 1 mes
Puntos: 3
Respuesta: Duda Consulta con LIKE y %

El problema de BÚSQUEDAS DE TEXTO COMPLETO es este:

Cita:
El resultado de búsqueda es vacío porque la palabra “MySQL” está presente al menos en el 50% de los registros. Como tal, se trata efectivamente como una palabra de parada. Para conjuntos grandes, este es el comportamiento más deseable--una consulta en lenguaje natural no debe retornar cada segundo registro de una tabla de 1GB. Para conjuntos pequeños, puede ser menos deseable.
Necesitaria que encontrase todas las filas de ta tabla, aunque fuesen el 98%de las entradas.

Última edición por keko123; 21/03/2012 a las 07:21
  #6 (permalink)  
Antiguo 21/03/2012, 09:13
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Duda Consulta con LIKE y %

Hola de nuevo:

El tema de las búsquedas de texto completo es muy amplio, lamentablemente la mayoría de los foristas sólo se conforman con leer algunas pocas líneas de los manuales y hay muchas cosas que no consideran. Continuando con las Citas del manual...

Cita:
El límite del 50% para búsquedas de lenguaje natural está determinada por el esquema de pesos elegido. Para desactivarlo, consulte la siguiente línea en myisam/ftdefs.h:

#define GWS_IN_USE GWS_PROB
Cambie esta línea a:

#define GWS_IN_USE GWS_FREQ
A continuación recompile MySQL. No hay necesidad de rehacer los índices en este caso. Nota: Al hacer esto se decrementa severamente la habilidad de MySQL para proporcionar valores apropiados de relevancia para la función MATCH(). Si realmente necesita buscar para estas palabras comunes, es mejor buscar usando IN BOOLEAN MODE en su lugar, que no observa el límite del 50%.
Algunas otras consideraciones que conviene tomar en cuenta:

http://dev.mysql.com/doc/refman/5.0/...ne-tuning.html

Saludos
Leo.
  #7 (permalink)  
Antiguo 21/03/2012, 17:17
 
Fecha de Ingreso: marzo-2012
Mensajes: 43
Antigüedad: 12 años, 1 mes
Puntos: 3
Respuesta: Duda Consulta con LIKE y %

Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola de nuevo:

El tema de las búsquedas de texto completo es muy amplio, lamentablemente la mayoría de los foristas sólo se conforman con leer algunas pocas líneas de los manuales y hay muchas cosas que no consideran. Continuando con las Citas del manual...



Algunas otras consideraciones que conviene tomar en cuenta:

[url]http://dev.mysql.com/doc/refman/5.0/es/fulltext-fine-tuning.html[/url]

Saludos
Leo.
Gracias por la respuesta, la verdad es que estuve buscando un monton de informacion pero esto en concreto no lo habia visto, otro problema que tengo es que uso claves foraneas, y segun he leido no es compatible con MyISAM. ¿Tan malo es usar LIKE?
  #8 (permalink)  
Antiguo 21/03/2012, 21:48
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Duda Consulta con LIKE y %

Hola de nuevo keko123...

El uso del LIKE no es "malo", sino bastante ineficiente, sobre todo cuando se utiliza con busquedas del tipo "%palabra%"... si en tu tabla no tienes muchos registros pues igual y no vas a observar un problema con las consultas pero en ambientes productivos, donde las tablas pueden tener varios miles de registros el performance del servidor se puede ver comprometido...

Ahora bien, como ya te habrás dado cuenta las tablas MyISAM tienen varias limitantes, por lo que es posible que no puedas implementar este tipo de catálogos y optar por seguir utilizando LIKE...

Lo que quería hacer notar con mi post es que LIKE no es el único modo de búsqueda de patrones...

Saludos
Leo.
  #9 (permalink)  
Antiguo 22/03/2012, 12:54
 
Fecha de Ingreso: marzo-2012
Mensajes: 43
Antigüedad: 12 años, 1 mes
Puntos: 3
Respuesta: Duda Consulta con LIKE y %

Hola, al final he cambiado la base de datos y he optado por usar FULLTEXT en vez de LIKE, pero necesito cambiar varais variables, he conseguido cambiar todas menos #define GWS_IN_USE GWS_PROB por #define GWS_IN_USE GWS_FREQ.

Unos Appserv y no tengo ni idea de donde se cambia esa variable, por un casual no lo sabras? Llevo todo el dia buscando y no he encontrado nada

Un saludo
  #10 (permalink)  
Antiguo 22/03/2012, 13:03
 
Fecha de Ingreso: marzo-2012
Mensajes: 43
Antigüedad: 12 años, 1 mes
Puntos: 3
Respuesta: Duda Consulta con LIKE y %

Me autorespono, si uso IN BOOLEAN MODE se elimina la clausa del 50%
  #11 (permalink)  
Antiguo 22/03/2012, 13:14
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Duda Consulta con LIKE y %

Jejeje... creo que no leíste correctamente todo el post que puse... ahí venía la respuesta:

Cita:
Si realmente necesita buscar para estas palabras comunes, es mejor buscar usando IN BOOLEAN MODE en su lugar, que no observa el límite del 50%.
Saludos
Leo.
  #12 (permalink)  
Antiguo 22/03/2012, 15:25
 
Fecha de Ingreso: marzo-2012
Mensajes: 43
Antigüedad: 12 años, 1 mes
Puntos: 3
Respuesta: Duda Consulta con LIKE y %

tus respuestas las lei ayer, hoy decidi cambiar las bases de datos y no las volvi a leer, no me acordaba que me lo habias puesto, pero no hay mal que por bien no venga, he leiso un monton y aprendido algunas cosas nuevas.

Muchas gracias por tus respuestas, la verdad es que me has ayudado mucho y he podido aprender algunas cosillas.

Etiquetas: select, tabla
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 19:18.