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

Buscar en campo delimitado por pipes

Estas en el tema de Buscar en campo delimitado por pipes en el foro de Mysql en Foros del Web. Hola en mi bd tengo una tabla de productos con un campo que se llama familias el cual contiene ejemplo: id_producto---- nombre---------familias 125--------------Producto1-------12|45|85|65 126--------------Producto1-------45|11|2 Como ...
  #1 (permalink)  
Antiguo 11/03/2013, 16:37
 
Fecha de Ingreso: agosto-2008
Mensajes: 272
Antigüedad: 15 años, 8 meses
Puntos: 1
Buscar en campo delimitado por pipes

Hola en mi bd tengo una tabla de productos con un campo que se llama familias el cual contiene ejemplo:

id_producto---- nombre---------familias
125--------------Producto1-------12|45|85|65
126--------------Producto1-------45|11|2

Como puedo hacer de tal forma que si en el buscador pongo: buscar todos los productos que tengan familia 12 y 45
  #2 (permalink)  
Antiguo 11/03/2013, 16:55
 
Fecha de Ingreso: septiembre-2006
Mensajes: 139
Antigüedad: 17 años, 7 meses
Puntos: 14
Respuesta: Buscar en campo delimitado por pipes

Hola mega0079,

Si estás usando una base de datos de ese tipo, lo más usual, es que para obtener Bases de Datos relacionales, te asegures de que cumple con las Formas Normales que permiten evitar datos redundantes y que las consultas sean más efectivas.

Esa tabla que muestras está por lo tanto incumpliendo con una de las formas normales, en concreto la primera, que dice algo así como que la relación (denominada así dentro del modelo lógico) no deben existir campos con valores múltiples (en tu caso el valor de familias).

Por lo tanto lo suyo es dividir tu tabla en las siguientes:

idProducto | nombre
125 | Producto 1
126 | Producto 2


ProductosPorFamilia
idProducto | idFamilia
125 | 12
125 | 45
125 | 85
125 | 65
126 | 45
126 | 11
126 | 2

Esto nos lleva a crear otra tabla:

IdFamilia | Familia
2 | DescripcionFamilia2
11 | DescripcionFamilia11
12 | DescripcionFamilia12
45 | DescripcionFamilia45
65 | DescripcionFamilia65
85 | DescripcionFamilia85

De todos modos habría que estudiar un poco más detalladamente a qué se refieren cada uno de los atributos de las tablas por si hay que seguir normalizando, porquen este caso ambos campos en la tabla ProductosPorFamilia crearían la Primary Keys o clave primaria identificativa de la tabla, procediendo de las otras tablas como claves foráneas o Foreign Keys.

Saludos cordiales.
Francisco J.
  #3 (permalink)  
Antiguo 11/03/2013, 17:00
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, 4 meses
Puntos: 2658
Respuesta: Buscar en campo delimitado por pipes

Eso que dices, @mega0079, es lo que se denomina "campo multivaluado" y están totalmente prohibidos en las bases de datos relacionales. Sólo sirven para darte dolores de cabeza a la hora de realizar consultas... como lo que te pasa ahora.
Ese tipo de campos indica que existe una relación N:N entre Productos y Familias, que obligatoriamente debe generar una tabla nueva, que se usa para administrar la relación.
Lo que tienes, en definitiva, es un mal diseño de datos.
Deberías considerar hacer una corrección y te evitarás hacer malabares en las búsquedas como la que necesitas.

Bueno, @geofran80 se me adelantó, con una explicación bien detallada.
Préstale atención.

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 11/03/2013, 17:28
 
Fecha de Ingreso: agosto-2008
Mensajes: 272
Antigüedad: 15 años, 8 meses
Puntos: 1
Respuesta: Buscar en campo delimitado por pipes

super, yo entiendo su explicación, pero el problema es que yo no hice esta base de datos, yo creo que si sera mas fácil normalizarla creo que eso haré, tardare menos en hacer eso...

Solo quería ver si había una "solución rápida", peor mas vale trabajar bien gracias!

Etiquetas: campo, 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:26.