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

Busqueda con like

Estas en el tema de Busqueda con like en el foro de Mysql en Foros del Web. Buenas tengo el siguiente problema tengo una columna de tags (No esta bien normalizada ya que es multivaluada con datos separados por coma) y debo ...
  #1 (permalink)  
Antiguo 23/11/2012, 05:04
 
Fecha de Ingreso: octubre-2010
Mensajes: 24
Antigüedad: 13 años, 6 meses
Puntos: 0
Busqueda con like

Buenas tengo el siguiente problema tengo una columna de tags (No esta bien normalizada ya que es multivaluada con datos separados por coma) y debo buscar entre todo el texto de tags una palabra que recibo como parametro resulta que utilice el LIKE %Palabra% y anda fenomeno el problema que tengo es que por ejemplo:

Tags: Madrid,Barcelona,PERUGIA
Tags 2: Peru,Uruguay,Colombia

En este caso me tira en la consulta que haga %Peru% ambos registros tanto por PERUGIA como por PERU pero yo solo quiero a PERU.
  #2 (permalink)  
Antiguo 23/11/2012, 06:30
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 2 meses
Puntos: 89
Respuesta: Busqueda con like

Prueba

like '%PERU,%' OR like '%PERU'
  #3 (permalink)  
Antiguo 23/11/2012, 09:00
 
Fecha de Ingreso: octubre-2010
Mensajes: 24
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Busqueda con like

Me sigue apareciendo Perugia , ya intente por todos los medios y la verdad nos e como lograrlo
  #4 (permalink)  
Antiguo 23/11/2012, 11:18
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Busqueda con like

Hola Diego_bolso93

Puedes probar con la función FIND_IN_SET, así;

Código MySQL:
Ver original
  1. mysql> select * from tabla;
  2. +------+-------------------+
  3. | id   | tag               |
  4. +------+-------------------+
  5. |    1 | Peru,al,inicio    |
  6. |    2 | Perugia,al,inicio |
  7. |    3 | en,Peru,medio     |
  8. |    4 | en,Perugia,medio  |
  9. |    5 | al,final,Peru     |
  10. |    6 | al,final,Perugia  |
  11. +------+-------------------+
  12. 6 rows in set (0.00 sec)
  13.  
  14. mysql> SELECT tag FROM tabla WHERE FIND_IN_SET('Peru', tag) > 0;
  15. +----------------+
  16. | tag            |
  17. +----------------+
  18. | Peru,al,inicio |
  19. | en,Peru,medio  |
  20. | al,final,Peru  |
  21. +----------------+
  22. 3 rows in set (0.00 sec)

La opción que propone Heimish2000 también podría funcionar, pero está incompleta, además las comparaciones tipo LIKE deben de evitarse en la medida de lo posible, pues tienen un rendimiento muy lento... completando la idea de utilizar LIKE sería así:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla
  2.     -> WHERE
  3.     -> tag LIKE 'Peru,%' OR
  4.     -> tag LIKE '%,Peru,%' OR
  5.     -> tag LIKE '%Peru';
  6. +------+----------------+
  7. | id   | tag            |
  8. +------+----------------+
  9. |    1 | Peru,al,inicio |
  10. |    3 | en,Peru,medio  |
  11. |    5 | al,final,Peru  |
  12. +------+----------------+
  13. 3 rows in set (0.01 sec)

Pero insisto, no recomiendo para nada utilizar esta forma, pues es muy lenta... Haz la prueba y nos comentas.

Saludos
Leo.

Etiquetas: registros, 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 17:00.