我有一个要求,以显示商品详细页的同类产品以这样的方式,上市的产品应低于如何使用多个select查询优化一个UNION mysql查询?
- 大小,颜色,类别,公司给出的分级方式符合目前产品性能应与当前的产品
- 大小,颜色,类别应与当前的产品
- 大小,颜色应与当前的产品
- 大小应与当前的产品
我的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个相似的产品。如果存在4个匹配条件1的产品,则需要先按随机顺序列出。同样,我们需要列出与其下面的其他条件匹配的产品。
在此先感谢!
ORDER BY RAND()一般是缓慢的,反正你需要提供解释的输出。 –
感谢您的评论。我已经更新了这个问题。 –
对不清楚,但我在说,http://dev.mysql.com/doc/refman/5.0/en/explain.html –