我正在使用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查询。有没有办法把它放到一个查询中,或者至少更有效率。
答案 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)