Ver Mensaje Individual
  #2 (permalink)  
Antiguo 05/01/2014, 12:10
Avatar de gnzsoloyo
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: Como hacer que un mismo dato se muestre en dos categorias

Cita:
Tengo unos productos cada uno en una categoría, me gustaría que un mismo producto pudiera aparecer en por ejempolo dos categorías.
Este es un tema más de bases de datos que de PHP, pero te doy un anticipo: Se necesita si o si una tabla adicional.
Lo que preguntas es lo que se denomina "relacion de cardinalidad N:N entre dos tablas", y representa que un registro de la tabla A (digamos Productos) se encuentra relacionado a uno o más de la tabla B (Categorías), y a su vez cada registro de la tabla B está relacionado con uno o más de la tabla A.
En BBDD este tipo de relaciones obligatoriamente crea una tabla nueva donde la PK de cada una de las tablas es uno de los atributos de la tercera, y el par de claves determinan la PK de esta nueva tabla (clave compuesta).
Es un tema que puedes ver en cualquier manual o tutorial de bases de datos relacionales.
En esencia sería:
Cita:
Productos(producto_id, nombre, ...)
Categoría(categoria_id, descripcion, ...)
producto_categoria(producto_id, categoria_id)
Los subrayados, por convención, indican cuales son las PK de cada tabla.

En este caso, una consulta que devuelva la lista de productos con sus categorías sería mas o menos:
Código SQL:
Ver original
  1. SELECT P.producto_id, P.nombre, C.categoria_id, C.descripcion
  2. FROM productos P INNER JOIN categoría C ON P.producto_id = C.categoria_id
  3. WHERE (condiciones)
El resultado sería una tabla que repite el producto por cada categoria distinta que tenga el mismo (esto es inevitable), por lo que la visualización luego se resuelve a nivel PHP.

¿Se entiende la idea?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)