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

Búsqueda en cadena separada por comas

Estas en el tema de Búsqueda en cadena separada por comas en el foro de Mysql en Foros del Web. Hola, tengo la siguiente situación: En una tabla tengo un campo llamado servicios. Dentro de este campo voy a tener valores (números) separados por coma. ...
  #1 (permalink)  
Antiguo 03/09/2009, 16:30
 
Fecha de Ingreso: noviembre-2005
Ubicación: Córdoba - Argentina
Mensajes: 155
Antigüedad: 18 años, 5 meses
Puntos: 1
Búsqueda en cadena separada por comas

Hola, tengo la siguiente situación:

En una tabla tengo un campo llamado servicios. Dentro de este campo voy a tener valores (números) separados por coma. Estos números son id's de servicios. Un registro por ejemplo sería "1,8,14,21", donde cada número sería un id de servicio.

Mi pregunta va dirigida hacia la consulta que tengo que hacer. Al caso, si quiero que me muestro un registro que contenga el servicio con id "1", cuál sería la forma de hacerlo?? Hay algo equivalente en Mysql a lo que es in_array() de php?

Yo pensé dos métodos. El primero con un LIKE, pero el problema es que me podría tomar valores como el 1 en valores como el 11.
La otra forma es con un JOIN, pero para esto tendría que crear otra tabla con las relaciones, y no sólo sería crear una tabla, serían tres mas. Además no se me ocurre demasiado como sería la sentencia.

Aclaro que es para un sistema que realiza búsquedas sobre negocios.

Desde ya, muchas gracias!
  #2 (permalink)  
Antiguo 03/09/2009, 20:45
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Búsqueda en cadena separada por comas

select *from tabla where campo in(1,8,14,21)

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 03/09/2009, 21:39
 
Fecha de Ingreso: noviembre-2005
Ubicación: Córdoba - Argentina
Mensajes: 155
Antigüedad: 18 años, 5 meses
Puntos: 1
Respuesta: Búsqueda en cadena separada por comas

Gracias por responder huesos. Ya había probado eso, el tema pasa porque es una cadena de texto.
De todos modos me arroja un resultado si en el campo tengo solo un id. Si tengo varios no.

Ejemplo
Tengo en dos registros los siguientes id's:
-> "12"
-> "1,5,12,18,21"

Si busco por el id 12 me arroja el resultado del primero, no asi el del segundo que tiene varios id's.

Alguna idea?

Gracias!
  #4 (permalink)  
Antiguo 03/09/2009, 22:21
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, 5 meses
Puntos: 2658
Respuesta: Búsqueda en cadena separada por comas

Cita:
Alguna idea?
Prueba con esto:
Código sql:
Ver original
  1. SELECT *
  2. FROM tabla
  3. WHERE  FIND_IN_SET(valorbuscado,servicios)>0;
Yo no lo he intentado, pero debería funcionar...
__________________
¿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 03/09/2009, 23:10
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Búsqueda en cadena separada por comas

Usando una expresión regular también lo lograrás.
Código sql:
Ver original
  1. SELECT * FROM tutabla WHERE servicios REGEXP '[[:<:]]12[[:>:]]'

En tu caso, puesto que separas con comas, te recomendaría la consulta de gnzsoloyo por ser más eficiente.
Pero si separaras con espacios en blanco, o algún otro signo que no fuera la coma, tendrías que usar la expresión regular.

Última edición por jurena; 03/09/2009 a las 23:17
  #6 (permalink)  
Antiguo 03/09/2009, 23:42
 
Fecha de Ingreso: noviembre-2005
Ubicación: Córdoba - Argentina
Mensajes: 155
Antigüedad: 18 años, 5 meses
Puntos: 1
Respuesta: Búsqueda en cadena separada por comas

Gracias gnzsoloyo y jurena!
Justamente había encontrado sobre FIND_IN_SET y parece que anda bien.

Cualquier cosa vuelvo a preguntar!

De nuevo, gracias!
  #7 (permalink)  
Antiguo 29/12/2010, 12:01
 
Fecha de Ingreso: julio-2010
Mensajes: 19
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Búsqueda en cadena separada por comas

IN Me salvo la vida
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 14:00.