如何根据sql中产品的混合属性列设置获取值

时间:2018-01-20 13:18:38

标签: mysql sql database data-structures database-design

我一直在努力从mysql db获得所需的输出。首先请看一下我的表结构

sql table structure

编辑:这是我的模式 http://rextester.com/edit/NNCZ7986

现在当我运行下面提到的查询时,我得到如下结果

Select a.prodid,a.product,b.catid,b.category,d.attvalue,c.qty,c.price 
from tbl_products a left join
     tbl_categories b
     on a.catid = b.catid left join
     tbl_prodattval c
     on a.prodid = c.prodid left join
     tbl_attvalues d
     on c.attvalid = d.attvalid 

这是我得到的结果

query result

绿色的产品K1显示正确的数量和价格 并且还显示为单独的行 产品K1是XL及其数量和价格

但是,我需要产品K1,绿色+ XL(混合多属性)来获得价格和数量

同样,带XL和Green的Tee1应该有1个数量和价格 和带有绿色的XXL的Tee1应该有另一个

我想要下面的结果(attvalue2和attvalue3列只是虚构的......只是为了表明我想要从多属性中获得产品列表)

Prodid | Product | catid | category | attvalue | attvalue2 | attvalue3 | qty | price
20 | Tee1 | 14 | Tees | Green | XL |  | 2 | 23.00
20 | Tee1 | 14 | Tees | Blue | XL |  | 2 | 21.00

我如何得到它?

提前致谢

1 个答案:

答案 0 :(得分:0)

     Select a.prodid,a.product,b.catid,b.category,d.attvalue, e.attvalue,c.qty,c.price 
        from tbl_products a 
    left join tbl_categories b
            on a.catid = b.catid 
    left join tbl_prodattval c
            on a.prodid = c.prodid
    left join tbl_attvalues d
           on c.attvalid = d.attvalid
           and d.attID = //in tbl_attributes what is attid for color (ID for color)
     left join tbl_attvalues e
        on c.attvalidid = e.attvalid
          and d.attID =  //'in tbl_attributes what is attid for size (ID for size)