[英]How to get unique product list?
我們有名稱重復的類別產品列表。 如何獲得Postgres中不應有重復產品名稱的產品列表?
我們正在搜索按名稱分組的最小產品ID。 然后在ID中搜索產品。
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.pluck(:name).uniq來僅獲取數組中的產品名稱。
但是我認為您正在解決錯誤的問題,因為該問題的“氣味”很差。 如果您的產品具有相同的名稱,那么如何從UX角度區分它們? 以及為什么只用該名稱獲得第一個創建的產品而不是最受歡迎的產品呢? 我試圖想象這種解決方案將如何為用戶服務,而我卻空白了,也許是因為我對上下文還不了解。
編輯:另外,您能否闡明“不應該有重復的產品名稱”是什么意思? 是否要獲取產品列表,但如果有多個具有相同名稱的產品,則僅獲取第一個產品? 還是您正在尋找更正的項目?
Postgres中的簡單解決方案是使用DISTINCT ON
:
SELECT DISTINCT ON (name)
id, name -- add more columns if you need
FROM Product
WHERE deleted = FALSE
ORDER BY name, id;
返回唯一的產品名稱(按字母順序排序)。 在每組騙子中, id
最小的那一組。 細節:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.