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