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 originalSELECT P.producto_id, P.nombre, C.categoria_id, C.descripcion
FROM productos P INNER JOIN categoría C ON P.producto_id = C.categoria_id
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?