MySQL找到重复的产品和更新列

时间:2012-10-15 16:34:25

标签: php mysql opencart

我正在使用opencart开发一个网站,并将其设置为自动从两个不同的批发商处导入产品。该数据库中包含大约40,000种不同的产品,其中约10,000种是重复产品(均带有产品)。

我需要查找所有重复的产品(通过UPC)并以较低的价格启用产品。

该表名为“product”,其列包含product_id,upc,price,status等非相关列。

我的第一次尝试是运行以下查询

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

它给了我所有重复产品的列表,然后我将在php中循环这些upcs并运行

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

这将使价格最低的那个。

这有效,但似乎非常有用似乎是如何依靠php来运行10,000个不同的mysql查询。有没有办法把它放到一个查询中,或者至少更有效率。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

不是用PHP编写,而是始终可以在数据库级别创建一个过程并从PHP代码中调用它,这至少可以节省PHP和DB之间的会话时间(本例中为9999)