1

我有两个 MySql 表。

其中一个存储有关产品的一般数据(名称、图像、描述)。

table name: product
table fields: id, name, desc, brand, image, status

第二个存储有关产品的不同变化(尺寸、颜色、价格、促销价)。

table name: product_variation
table fields: product_id, size, color, price, prom_price, status

我真的不知道的是如何显示第一个表中的产品按第二个表中的价格排序,考虑到第二个表中有多个行具有相同的产品 ID,但大小、颜色不同当然还有价格。默认情况下应考虑 price 字段,但如果 prom_price 字段中的数据大于 0,则应考虑 prom_price。

编辑:我需要的结果是第一个表中每个产品的一个实例,第二个表中的最低价格(来自第二个表中该产品的所有变体)

4

2 回答 2

0

这是一种方法,使用左连接找到产品的最便宜价格(price 或 prom_price),然后按该价格排序。使用公用表表达式很容易删除重复的CASE表达式,但遗憾的是,MySQL 没有这些:-/

SELECT p.name FROM products p
JOIN product_variations pv1 ON p.id=pv1.product_id
LEFT JOIN product_variations pv2 ON pv1.product_id = pv2.product_id
 AND CASE WHEN pv1.prom_price<>0 THEN pv1.prom_price ELSE pv1.price END >
     CASE WHEN pv2.prom_price<>0 THEN pv2.prom_price ELSE pv2.price END
WHERE pv2.product_id IS NULL
ORDER BY CASE WHEN pv1.prom_price<>0 THEN pv1.prom_price ELSE pv1.price END;

一个用于测试的 SQLfiddle

于 2013-05-20T13:35:20.407 回答
0
SELECT * FROM product p
INNER JOIN product_variation pv
ON p.id = pv.product_id
ORDER BY pv.prom_price, pv.price

无论您拥有多少变体,这都会复制您的产品行(并在相关字段中显示所有这些变体)。它首先按 prom_price 排序,如果它为 0(或不是唯一的),则按价格排序。

编辑:如果您希望产品保持在一起,您可能需要 GROUP BY p.id。

于 2013-05-20T12:54:01.137 回答