【发布时间】:2019-03-20 18:25:48
【问题描述】:
我想构建一个按属性过滤产品的查询。产品和属性与中间表_product_attributes 连接。每个属性都有组(如属性s 有组Size)。
- 如果只选择了一个属性,则只应显示具有该属性的产品
- 如果选择了来自一个属性组的多个产品,则应显示属于这些属性之一的产品。因此选择了更多属性 - 显示了更多产品
- 如果选择了一组 (
Size) 和另一组 (Color) 的属性,则应显示具有选定尺寸和选定颜色的产品。 - 应为每个属性显示产品计数
- 从该特定组中选择属性时,不会更改一个属性组中的产品计数。例如,S 码有 3 个产品,L 码有 4 个产品。如果选择 S 码或 L 码或选择 S 和 L 码,则应显示这些计数
- 选择不同组的属性时应更改产品计数(如果选择了尺寸和颜色,则显示每种颜色的产品计数,考虑到产品应采用选定尺寸)
- 如果在没有任何颜色的产品中选择了尺寸属性,则不显示颜色属性。
- 如果选择了一组属性,则应显示该组的所有属性(仅显示)
这是 sql fiddle https://www.db-fiddle.com/f/cWqvBYp6vMKy3KbNedeiqd/1。
简而言之,它是一个简单的过滤系统。当我尝试从选择属性的组中显示属性时,我的困扰开始了。就像选择 S 码一样,我也想显示 M 码。你可以看到它的小提琴。
当前查询显示正确结果。但是 S 尺寸的产品计数不正确。我尝试了不同的方法。但是在我看来,它无法按我的意愿查询。
在提出问题时,我省略了一些细节以使问题(看起来很复杂)变得简单。我在products 关系上有额外的where 子句(按价格过滤)。
编辑
诀窍是where groups.id = 1 的位置和方式。它打破了产品计数所有以前的条件。
【问题讨论】:
标签: mysql