-2

以下に示すように、リストされた製品が現在の製品プロパティと階層的に一致するように、製品詳細ページに類似製品を表示する必要があります。

  1. サイズ、色、カテゴリ、会社は現在の製品と一致する必要があります
  2. サイズ、色、カテゴリは現在の商品と一致する必要があります
  3. サイズ、色は現在の製品と一致する必要があります
  4. サイズは現在の製品と一致する必要があります

私のSQLクエリは次のとおりです。

(SELECT pd.product_id, pd.name, p.price 
        FROM mg_product_description pd 
            JOIN `mg_product` p ON p.product_id = pd.product_id 
        WHERE 
            pd.size_id = '33' AND 
            pd.color_id = '2' AND 
            pd.category_id = '3' AND 
            pd.company_id = '1'  AND 
            pd.product_id != '53'  AND 
            p.status = '1' 
            ORDER BY RAND() LIMIT 10 
    )
        UNION
    (SELECT pd.product_id, pd.name, p.price 
        FROM mg_product_description pd 
            JOIN `mg_product` p ON p.product_id = pd.product_id 
        WHERE 
            pd.size_id = '33' AND 
            pd.color_id = '2' AND 
            pd.category_id = '3'  AND 
            pd.product_id != '53'  AND 
            p.status = '1' 
            ORDER BY RAND() LIMIT 10 
    )
        UNION
    (SELECT pd.product_id, pd.name, p.price 
        FROM mg_product_description pd 
            JOIN `mg_product` p ON p.product_id = pd.product_id 
        WHERE 
            pd.size_id = '33' AND 
            pd.color_id = '2' AND 
            pd.product_id != '53'  AND 
            p.status = '1' 
            ORDER BY RAND() LIMIT 10 
    )
        UNION
    (SELECT pd.product_id, pd.name, p.price 
        FROM mg_product_description pd 
            JOIN `mg_product` p ON p.product_id = pd.product_id 
        WHERE 
            pd.size_id = '33' AND 
            pd.product_id != '53' AND 
            p.status = '1'
            ORDER BY RAND() LIMIT 10 
    )

53 - 現在の製品 ID とステータスが利用可能であることを示します。

上記のクエリを最適化する方法はありますか?

注意 必要な出力: 類似商品が 10 個必要です。条件 1 に一致する商品が 4 つある場合は、最初に順不同に並べる必要があります。同様に、その下に他の条件に一致する製品をリストする必要があります。

前もって感謝します!

4

1 に答える 1