我想找到匹配尽可能多的可选标签的产品,这些标签由所有条件标签标记,按匹配的可选标签数量排序。
我想出了这个来计算可选标签:
optional_tags = [1,2,3]
conditional_tags = [4]
products = Product.select('COUNT(*) AS count_all, products.*')
.joins(:tags).where('tags.id IN (?)', optional_tags)
.group('products.id')
.order('count_all DESC')
我成功获得了产品 ID 和匹配的可选标签的数量:
products: {30=>4, 26=>3, 29=>3, 27=>2, 28=>1}
当我尝试添加条件标签时,我只得到一个空哈希。我试过这样:
products = Product.where('tags.id IN (?)', conditional_tags)
.select('COUNT(*) AS count_all, products.*')
.joins(:tags).where('tags.id IN (?)', optional_tags)
.group('products.id')
.order('count_all DESC')
Rails 优化了查询并结合了所有where部分......
如何将条件标签添加到我的构造中?谢谢你的帮助!
例子:
产品的类型很重要,但人们并不关心细节。
条件标签 = [ 1 辆车]
optional_tags = [ 2 红色,3 奔驰,4 快速]
一辆红色的 汽车是可以的,但一辆梅赛德斯的红色快速 摩托车不应该出现在结果列表中,即使有更多匹配的标签。