好吧,试着让我的标题尽可能具有描述性。
我正致力于开发具有变体(儿童)产品的电子商务。
产品的每个变体都是产品本身,其中“parent_id”行指向主要产品。 (如果存在,则为子节点,如果为null,则为主节点。)
产品结构:
product_id | parent_id |名字|价格| [...]
products_variants结构:
product_id |财产|值
每个变体都可以是一组属性和值。例如:
产品:
product_id:1 | parent_id:null |名称:“白色T恤”|价格:100
product_id:2 | parent_id:1 |名称:“白色T恤”|价格:100
product_id:3 | parent_id:1 |名称:“蓝色T恤”|价格:100
product_id:4 | parent_id:1 |名称:“蓝色T恤”|价格:100
(请注意,有两个“蓝色T恤衫”。让我们来看看他们的变体)
Products_variants:
product_id:1 |财产:“颜色”|价值:“白色”
product_id:1 |物业:“大小”|值:“L”
product_id:2 |财产:“颜色”|价值:“白色”
product_id:2 |物业:“大小”|值:“XL”
product_id:3 |财产:“颜色”|价值:“蓝色”
product_id:3 |物业:“大小”|值:“L”
product_id:4 |财产:“颜色”|价值:“蓝色”
product_id:4 |物业:“大小”|值:“XL”
太多介绍,现在是我的问题(如果你还在读这篇文章的话,你很棒)。
我目前按类别,价格,变体(如每个电子商务)进行过滤。 但是,因为如果我正在使用HAVING寻找颜色“蓝色”,那么可能会有多个变体。
(SELECT值FROM products_variants WHERE property = color and value = 蓝色)作为颜色有颜色不是空的
问题是我想只显示父母。 如果你寻找“蓝色衬衫”,好吧......这是原来的“白衬衫”,有蓝色,红色,黄色等。
另一个选项将显示所有变体,颜色,这是很好,甚至更有意义。 (你寻找“蓝色”,然后你只得到“蓝色”)。
但请记住我有SIZES,所以如果你寻找“蓝色衬衫”,你会看到我在数据库中的每个尺寸都有一个“蓝色衬衫”。这太可怕了。
现在......为了使它更复杂,可能......
蓝色衬衫|尺寸:L |袖子:短|颜色:蓝色
蓝色衬衫|尺寸:L |袖子:长|颜色:蓝色
蓝色衬衫|尺寸:XL |袖子:短|颜色:蓝色
蓝色衬衫|尺寸:XL |袖子:长|颜色蓝
如果我寻找“蓝色”应该给我带来两个结果。蓝色长袖和蓝色短袖(无论大小)。
但如果我尝试按属性进行分组,如果值为“size”,我会得到两件衬衫,其中袖子被错误地分组。
示例:
希望你理解。我愿意接受问题。
答案 0 :(得分:0)
感谢您的详细信息。我看到一切都很好。基于我的问题,我正在写下面的问题。
要获得主要产品,您可以尝试以下伪用例,"作为用户,我只想查看蓝色产品"
转到" Products_variants"表和列出所有" product_id"其中"属性:' color' |价值:'蓝'"。
保持返回的Object / Array在运行时内存中。
现在转到"产品"表并返回" parent_id" " product_id"你已经退回#2表格。这将返回主要产品。