Ruby on rails 如何获得独特的产品列表?
我们有名称重复的类别产品清单。 如何获取Postgres中不应该有重复产品名称的产品列表 我们正在搜索按名称分组的最小产品ID。 然后在ids中搜索产品Ruby on rails 如何获得独特的产品列表?,ruby-on-rails,database,postgresql,Ruby On Rails,Database,Postgresql,我们有名称重复的类别产品清单。 如何获取Postgres中不应该有重复产品名称的产品列表 我们正在搜索按名称分组的最小产品ID。 然后在ids中搜索产品 category = Category.first ids = Product.select("MIN(id) as id").where(deleted: false).group(:name).collect(&:id) category.products.where("products.id IN (?)", ids).find_
category = Category.first
ids = Product.select("MIN(id) as id").where(deleted: false).group(:name).collect(&:id)
category.products.where("products.id IN (?)", ids).find_active
如何优化查询?您可以使用Product.all.pulk(:name).uniq来获取数组中的产品名称 但我认为你解决了一个错误的问题,因为这个问题有一股难闻的味道。如果您的产品具有相同的名称,您如何从用户体验的角度区分它们?为什么只得到第一个用这个名字创造的产品,而不是最“流行”的产品?我正试图想象这个解决方案将如何为用户工作,而我却一片空白,可能是因为我对上下文了解不够
编辑:另外,您能澄清一下“不应该有重复的产品名称”是什么意思吗?是否要获得产品列表,但如果有多个同名产品,则仅获取第一个产品?或者您正在寻找要更正的项目吗?Postgres中的简单解决方案是使用
在上进行区分:
SELECT DISTINCT ON (name)
id, name -- add more columns if you need
FROM Product
WHERE deleted = FALSE
ORDER BY name, id;
返回唯一的产品名称(按字母顺序排序)。从每组重复中选择id最小的重复。详情:
只有名字吗?或者整行?类别有很多产品。如何在没有重复名称的类别下查找产品?我们不应该展示重复的产品。如果有同名的重复产品,那么我们应该列出其中一个。