0

私は opencart を使用して Web サイトに取り組んでおり、2 つの異なる卸売業者から製品を自動的にインポートするように設定しています。データベースには約 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

これにより、すべての重複製品のリストが得られたので、それらの upcs を php でループして実行します。

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

これにより、最低価格のものが有効になります。

これは機能しますが、10,000 の異なる mysql クエリを実行するために php に依存していることは非常に非効率的です。これを単一のクエリに入れる方法、または少なくともより効率的な方法はありますか。

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 に答える