Ver Mensaje Individual
  #4 (permalink)  
Antiguo 04/02/2009, 08:02
quimfv
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Productos en Multiples Categorias

tbl_product
pd_id
cat_id
cat_id2
cat_id3

....

tbl_category
cat_id
cat_name
...

many
pd_id
cat_id
cat_id2
cat_id3
...

Parece que tenemos un arbol de categorias y que cada producto puede estar relacionado a varias ramas de categorias, es decir un producto puede tener varios trios de id de categoria (cat_id,cat_id2,cat_id3) eso nos lo permite la tabla many.

Con esa estructura sobran los campos cat_id de los tres niveles de en la tabla de productos, puesto que la relación producto categoria se hace atraves de la tabla many si la relacion fuera 1 a 1 luego si tendrian sentido y sobraria la tabla many.

Por lo anterior la base no estaria bien normalizada.

En cuanto a las funciones que me pasas, así por encima, tratan de categorias no de productos, por tanto no puedo ver donde tienes el error.

En cuanto a la query

Código:
SELECT tbl_product.pd_id, tbl_product.cat_id2, tbl_product.cat_id3, tbl_category.cat_id, 
CASE WHEN many.cat_id IS NULL 
THEN 'F'
ELSE 'T'
END AS selected
FROM tbl_category
CROSS JOIN tbl_product
LEFT JOIN many ON ( many.cat_id = tbl_product.cat_id
                          AND many.cat_id = tbl_product.cat_id ) 
WHERE (
tbl_product.cat_id = tbl_category.cat_id
)
ORDER BY `tbl_category`.`cat_id` ASC[...]';
no se porque repites la clausula que esta en rojo ni que indica [...]

Esa query da una lista de todos los productos y todas las categoria (CROSS JOIN=producto cartesiano) con un F o una T si existe la relacion producto categoria en cada caso, ademas nos da los tres campos innecesarios de la tabla productos.

Por tanto no da los productos de una categoria como pedias...?

Vamos por partes

Código:
SELECT P.pd_id,m.cat_id,m.cat_id2,m.cat_id3
FROM tbl_product P inner join many
            on p.pd_id=m.pd_id
esto nos da una lista de todos los productos con sus categorias (los productos estaran repetidos tantas veces como tripletas distintas de categorias tengan)


si agregamos a la consulta anterior un

where m.cat_id=cat_X

nos dara todos los productos el primer nivel de categoria sea igual a cat_X

where m.cat_id=cat_X or m.cat_id2=cat_X or m.cat_id3=cat_X

esto nos daria los productos que uno de sus tres niveles de categoria sea igual a cat_X

A tu preugunta: NO TE SIGO!!!

Quim