2012-10-15 56 views
0

我正在使用opencart的網站上工作,並設置爲從兩個不同的批發商自動導入產品。該數據庫中包含大約40,000種不同的產品,其中約10,000種是重複的(均帶有該產品)。MySQL查找重複的產品和更新列

我需要查找所有重複產品(由UPC),並以較低的價格啓用產品。

該表稱爲「產品」,並具有product_id,upc,price,status和其他不相關的列。

我第一次嘗試是運行下面的查詢

SELECT DISTINCT (
upc 
) AS upcDuplicate, COUNT(upc) AS upcCount 
FROM product 
GROUP BY upc 
HAVING upcCount >1 

這給了我的所有重複的產品列表,然後我是通過在PHP中那些的UPC將循環和運行

UPDATE product SET status=1 WHERE upc='CURRENTUPC' ORDER BY price ASC LIMIT 1 

這將使價格最低的那個。

這工作,但似乎非常有效似乎它是如何依靠PHP來運行10,000個不同的MySQL查詢。有沒有什麼辦法可以把它放到單個查詢中,或者至少是更有效的方法。

回答

2

沒有測試過,所以它可以踢你的狗,竊取你的午飯錢,但......

UPDATE product 
INNER JOIN (
    SELECT upc, MIN(price) AS minprice 
    FROM product 
    GROUP BY upc 
) AS derived_product 
SET product.status=1 
WHERE product.upc = derived_product.upc AND product.price=derived_product.minprice 
+0

看起來效果很好。我會通過檢查一些數據,但是你寫的是非常有意義的。我甚至沒有考慮在查詢中使用MIN()。 這也使我可以激活所有在同一鏡頭中沒有重複的產品。 –

0

而是在PHP寫這個的,你總是可以在數據庫級別創建一個程序,並調用它從你的PHP代碼中,至少可以節省PHP和DB之間的通話時間(在這種情況下爲9999)