Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何获得独特的产品列表?_Ruby On Rails_Database_Postgresql - Fatal编程技术网

Ruby on rails 如何获得独特的产品列表?

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_

我们有名称重复的类别产品清单。 如何获取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_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最小的重复。详情:


只有名字吗?或者整行?类别有很多产品。如何在没有重复名称的类别下查找产品?我们不应该展示重复的产品。如果有同名的重复产品,那么我们应该列出其中一个。