具有按父项分组的变体的产品

问题描述 投票:0回答:1

好吧,试着让我的标题尽可能具有描述性。

我正在开发具有变体(儿童)产品的电子商务。

产品的每个变体都是产品本身,其中“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 values FROM products_variants WHERE property = color and value = blue)as color HAVING color IS NOT NULL

问题是我想只显示父母。如果你寻找“蓝色衬衫”,好的......这是原来的“白衬衫”,有蓝色,红色,黄色等。


另一种选择是显示所有变体,它们的颜色很好,甚至更有意义。 (你寻找“蓝色”,然后你只得到“蓝色”)。

但请记住我有SIZES,所以如果你寻找“蓝色衬衫”,你会看到我在数据库中的每个尺寸都有一个“蓝色衬衫”。这太可怕了。


现在......为了使它更复杂,可能......

蓝色衬衫|尺寸:L |袖子:短|颜色:蓝色

蓝色衬衫|尺寸:L |袖子:长|颜色:蓝色

蓝色衬衫|尺寸:XL |袖子:短|颜色:蓝色

蓝色衬衫|尺寸:XL |袖子:长|颜色蓝色

如果我寻找“颜色蓝”应该给我带来两个结果。蓝色长袖和蓝色短袖(无论大小)。

但是,如果我尝试按属性进行分组,如果值是“大小”,我会得到两件衬衫,其中袖子被错误地分组。

例:

enter image description here

希望你能理解。我愿意接受问题。

mysql filter e-commerce
1个回答
0
投票

谢谢你的详细信息我看到一切都很好。基于我的问题,我正在写下面的问题。

要获得主要产品,您可以尝试使用以下伪用例,“作为用户,我只想查看蓝色产品”

  1. 转到“Products_variants”表并列出“property:'color'| value:'blue'”的所有“product_id”。
  2. 保持返回Object / Array在运行时内存中。
  3. 现在转到“Products”表并返回从#2返回的“product_id”的“parent_id”。这将返回主要产品。
© www.soinside.com 2019 - 2024. All rights reserved.