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

[SOLUCIONADO] Serialize - Buscar dentro de la BD??

Estas en el tema de Serialize - Buscar dentro de la BD?? en el foro de Mysql en Foros del Web. Hola gente, estoy terminando una web, con un catálogo de artículos, y necesito ayuda a la hora de mostrar articulos relacionados con el artículo que ...
  #1 (permalink)  
Antiguo 22/04/2013, 09:07
Avatar de NnikoO  
Fecha de Ingreso: agosto-2008
Ubicación: Rosario
Mensajes: 245
Antigüedad: 15 años, 8 meses
Puntos: 0
Pregunta Serialize - Buscar dentro de la BD??

Hola gente, estoy terminando una web, con un catálogo de artículos, y necesito ayuda a la hora de mostrar articulos relacionados con el artículo que se este visualizando en el momento.

En la BD, dentro de la tabla 'articulos', existe un campo llamado [B]['pack' /B]que es donde se almacenan los ID de los diversos packs donde se categorizan estos artículos (pueden formar parte en más de un pack - a la hora de cargar estos artículos, los packs se eligen en un multi select, por lo que al almacenar en la BD, al array, le aplíco SERIALIZE para generar una representación almacenable de los valores obtenidos)

Hasta aquí todo funciona perfecto. El tema es, como dije antes, que al encontrarme visulizando el artículo 'Gorro' por ejemplo (suponiendo que pertenece a los packs -> 1, 6, 22), en los artículos relacionados deberían mostrarse otros artículos que pertenezcan a alguno de estos 3 packs mencionados.

El tema es, como hago para que dentro de la sentencia SQL, busque en la BD que artículos poseen alguno de esos packs? 'pack IN ($packs)'
Sabiendo que el dato almacenado en la tabla es una representación generada con SERIALIZE

Espero ser claro, y que alguien pueda ayudarme!
Muchas gracias de antemano...

<< niko >>
  #2 (permalink)  
Antiguo 22/04/2013, 09:14
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Serialize - Buscar dentro de la BD??

el tema es que para consultar, necesitas deserializar la data.
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 22/04/2013, 09:43
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Serialize - Buscar dentro de la BD??

No deberías guardar los datos de esa manera.

Lo mejor es crear una tabla adicional que tenga las relaciones de la tabla articulos con los packs (relación muchos a muchos)
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #4 (permalink)  
Antiguo 22/04/2013, 09:54
Avatar de NnikoO  
Fecha de Ingreso: agosto-2008
Ubicación: Rosario
Mensajes: 245
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Serialize - Buscar dentro de la BD??

Si ya sabía de mi error, el tema es que la web esta finalizada, solo queda este punto. Ya mañana el Estudio tiene que presentar el trabajo al cliente...
  #5 (permalink)  
Antiguo 23/04/2013, 03:37
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Serialize - Buscar dentro de la BD??

Lo mismo ya es tarde. Estoy de acuerdo con el consejo de David, pero visto que la base ya está hecha, puedes buscar los productos haciendo una consulta como la que te pongo. No la he probado. He inventado los campos
Código MySQL:
Ver original
  1.    nombreproducto
  2.   FROM productos pro
  3.     INNER JOIN packs pa
  4.        ON pro.idpack =pa.idpack
  5.      WHERE idproducto != @idproducto AND pa.idpack IN (1, 6, 22)
  6.  GROUP BY pa.idproducto
Lo que aparece tras el IN es la cadena del campo una vez deserializada. Prueba y nos dices.
  #6 (permalink)  
Antiguo 23/04/2013, 05:14
Avatar de NnikoO  
Fecha de Ingreso: agosto-2008
Ubicación: Rosario
Mensajes: 245
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Serialize - Buscar dentro de la BD??

Cita:
Iniciado por jurena Ver Mensaje
Lo mismo ya es tarde. Estoy de acuerdo con el consejo de David, pero visto que la base ya está hecha, puedes buscar los productos haciendo una consulta como la que te pongo. No la he probado. He inventado los campos
Código MySQL:
Ver original
  1.    nombreproducto
  2.   FROM productos pro
  3.     INNER JOIN packs pa
  4.        ON pro.idpack =pa.idpack
  5.      WHERE idproducto != @idproducto AND pa.idpack IN (1, 6, 22)
  6.  GROUP BY pa.idproducto
Lo que aparece tras el IN es la cadena del campo una vez deserializada. Prueba y nos dices.
Gracias por la respuesta Jurena! Aunque ya lo había solucionado. Este es parte del código, use el array de los packs que pertenecen al artículo activo en dicho momento, y el pack de los demás productos de la BD para buscar los relacionados, para logralo calcula la intersección entre ambos array con array_intersect y funciona perfectamente!
Cita:
Editado: No se permite código de programación en los foros de Bases de DAtos.

Última edición por gnzsoloyo; 23/04/2013 a las 05:24

Etiquetas: php, serialize
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 09:29.