gpt4 book ai didi

sql - 限制类别页面上产品列表中子类别的项目数量?

转载 作者:行者123 更新时间:2023-11-29 13:48:44 24 4
gpt4 key购买 nike

在我的 Rails 4.2 应用程序中,我在一个页面中显示了属于一个类别的几个不同子类别的项目列表。我也在子类别的页面上显示列表项。如前所述,在类别的页面上,我想显示每个所属子类别的最新 5 个项目,我不显示仅属于一个类别的所有项目,这在我的以下查询中发生。

我的类别模型

has_many :products, through: :subcategories

我的子类模型

has_many :products, dependent: :destroy
belongs_to :category, touch: true

我当前的查询

@products = @category.products.published.relevant(Time.zone.today).recent
.includes(:subcategory).limit(80)

我应该如何构造我的查询以将子类别的产品限制为 5 个,以便页面包含来自不同类别的产品?

最佳答案

不太优雅的 ruby​​ 解决方案

products_count = 0
subcatagories_count = {}
@products = []
category.
products.published.
relevant(Time.zone.today).
recent.includes(:subcategory).
find_each(batch: 80) do
subcatagories_count[product.subcatagory_id] ||= 0
if subcatagories_count[product.subcatagory_id] < 5
@products << product
products_count += 1
subcatagories_count[product.subcatagory_id] += 1
break if products_count >= 80
end
end
  • 一次加载 80 个。
  • 遍历它们并将它们添加到@products如果子目录 id 还没有被使用 5 次
  • 一旦选择了 80 个产品就离开循环。
  • 如果前 80 个匹配,将仅从数据库加载一次。
  • 还会继续搜索,直到找到 80 个或用完产品

关于sql - 限制类别页面上产品列表中子类别的项目数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44333048/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com