0

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

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

该表称为“产品”,具有列 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 查询的。有什么方法可以将其放入单个查询中,或者至少是更有效的方法。

4

2 回答 2

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
于 2012-10-15T16:40:17.977 回答
0

无需在 PHP 中编写此代码,您始终可以在 DB 级别创建一个过程并从您的 PHP 代码中调用它,这至少可以节省 PHP 和 DB 之间的对话时间(本例中为 9999)

于 2012-10-15T16:41:48.723 回答