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

Busqueda sobre un campo

Estas en el tema de Busqueda sobre un campo en el foro de Mysql en Foros del Web. Hola, Necesito hacer una busqueda sobre un campo determinado. El caso es que en ese campo (varchar) almaceno una serie de identificadores separados por comas: ...
  #1 (permalink)  
Antiguo 14/11/2008, 06:01
Avatar de chiviwalker  
Fecha de Ingreso: marzo-2004
Ubicación: Alicante
Mensajes: 55
Antigüedad: 20 años, 1 mes
Puntos: 0
Busqueda sobre un campo

Hola,

Necesito hacer una busqueda sobre un campo determinado.
El caso es que en ese campo (varchar) almaceno una serie de identificadores separados por comas: 1,5,8,15,18...

Lo que quiero es que cuando busque por 1 me devuelva todas las filas que en ese campo tienen 1.

Estoy bastante perdido alguna sugerencia.

Muchas gracias.
__________________
------------------------------------------
www.inetmarket.es
  #2 (permalink)  
Antiguo 14/11/2008, 06:13
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: Busqueda sobre un campo

La forma más simple es usando la función INSTR():
Código sql:
Ver original
  1. SELECT *
  2. FROM tabla
  3. HAVING INSTR(campo,'1');
__________________
¿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 14/11/2008, 06:36
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Busqueda sobre un campo

La solución de gnzsoloyo es parcial ya que te listara todos los que tengan un 1 es decir

los que tengan

1,...

...,15,...

...,21,....

podrias usar lo siguiente


Código sql:
Ver original
  1. SELECT *
  2.    FROM tabla
  3.    WHERE LEFT(campo,2)="1," OR INSTR(campo,',1,') OR RIGTH(campo,2)=",1";

así solo te dará los que contengan el indicador 1.

Lo mejor seria crear una tabla que contenga tantos registros como indicadores esten asociados al registro principal y luego hacer consultas a la combinación de las dos tablas....

TablaPrincipal
id
...


TablaIndicadores
id
idTablaPrincipal (fk)
indicador


con una relación 1 a muchos entre las dos tablas...


Por cierto gnzsoloyo como meteis el codigo SQL en ese formato tan elegante?

Quim

Última edición por quimfv; 17/11/2008 a las 02:08 Razón: Ahora
  #4 (permalink)  
Antiguo 14/11/2008, 07:35
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: Busqueda sobre un campo

Cita:
Por cierto gnzsoloyo como meteis el codigo SQL en ese formato tan elegante?
Es usando algo que anunciaron hace algunas semanas: Nuevo resaltador de código Geishi
__________________
¿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 14/11/2008, 07:51
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Busqueda sobre un campo

Gracias pero como ves no me funciona?

[highlight=sql]
SELECT * FROM table;
[/highlight=sql]


Quim
  #6 (permalink)  
Antiguo 14/11/2008, 08:27
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: Busqueda sobre un campo

El problema es:
[highlight=sql]
SELECT * FROM table;
[/highlight=sql]

Al final debe ir entre corchetes sólo: /highlight, así queda (copiando el bloque tuyo):
Código sql:
Ver original
  1. SELECT * FROM TABLE;
__________________
¿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 14/11/2008, 08:32
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Busqueda sobre un campo

Chiviwalker,

esa búsqueda puedes hacerla con expresiones regulares:

Código sql:
Ver original
  1. SELECT * FROM tutabla WHERE campo REGEXP '[[:<:]]1[[:>:]]'

Es cierto que no puedes aprovechar los índices, pero funcionará con esa estructura de datos que tienes.
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 20:37.