【发布时间】:2011-02-26 00:27:01
【问题描述】:
我想出了以下查询来返回产品定价数据。这个查询工作正常,但我想知道是否有办法简化/优化它?
查询会提取有关每个产品的产品和定价详细信息的信息。如果没有特定产品的定价详细信息 (p_p.pl_id = 2),请加入另一个包含定价详细信息的查询 (p_p.pl_id = 1)。最后按 id 对所有产品进行分组以获得不同的行。
使用的表格: 产品 - 有关产品的一些详细信息,例如名称、描述等。 product_pricing (p_p) - 包含每个产品的定价详情。一种产品可能有多个记录,因为产品价格因订购数量而异
SELECT * FROM (
(
SELECT `products`.*,
GROUP_CONCAT(p_p.`qty_range` SEPARATOR '|') AS qty_range,
GROUP_CONCAT(CAST(p_p.`p_price` AS CHAR) SEPARATOR '|') AS price
FROM `products`
LEFT JOIN `prod_pricing` AS p_p ON p_p.`prod_id` = `products`.`prod_id`
WHERE `products`.`account_id` = 2
AND p_p.`pl_id` = 2
GROUP BY `products`.`prod_id`
)
UNION
(
SELECT `products`.*,
GROUP_CONCAT(p_p.`qty_range` SEPARATOR '|') AS qty_range,
GROUP_CONCAT(CAST(p_p.`p_price` AS CHAR) SEPARATOR '|') AS price
FROM `products`
LEFT JOIN `prod_pricing` AS p_p ON p_p.`prod_id` = `products`.`prod_id`
WHERE `products`.`account_id` = 2
AND p_p.`pl_id` = 1
GROUP BY `products`.`prod_id`
)) AS list
GROUP BY list.`prod_id`
【问题讨论】:
-
使用存储过程(假设您的 Mysql 版本正确)?
-
您不会因为加入 PROD_PRICING 而获得不同的记录。看起来您想要 pl_id 2,如果产品没有 2 条记录,则为 1...
-
OMG Ponies:因为我将临时表 'list' 按 'prod_id' 分组,所以我得到了不同的记录,但我知道这不是一个好习惯
标签: mysql sql query-optimization