仅选择min(column1)和min(column2)中的行

时间:2015-03-04 13:06:19

标签: php mysql min

我有两张桌子。第一个表显示了id_product和product_price_value。下面我将向您展示一个示例(在我的数据库中有很多行)

表:main_product

ID_product: product_price_value: 
       119, Product1

表:value_product

product_price_value: width_from: width_to: height_from: height_to: price: 
Product1           ,         10,       20,           5,        15,   100
Product1           ,         10,       20,          10,        30,   200
Product1           ,         20,       30,           5,        45,   300
Product1           ,         30,       30,          20,        30,   400

正如您所看到的,一个产品可以有多个维度。我希望得到最低宽度和高度相结合的价格。在我的例子中,它应该是第一行(宽度来自 - > 10,高度来自 - > 5)。

我使用了以下代码:

$sql = "SELECT value_product.price FROM value_product INNER JOIN main_product
        ON (main_product.product_price_value = value_product.product_price_value
        AND (
         value_product.width_from = (SELECT MIN(value_product.width_from) FROM value_product) 
         AND value_product.height_from = (SELECT MIN(value_product.height_from) FROM value_product)
        )
);";

通过这种方式,我认为我会为每种产品获得最低宽度/高度的价格。但我得到的唯一结果是当width_from OR height_from包含值0.如果宽度或高度大于0,则它不会返回任何内容。

我在查询中做错了吗?

有没有办法以最低'width_from'和'height_from'列来获得价格?

由于

1 个答案:

答案 0 :(得分:2)

如果您只想为一种产品定价,您可以简单地排序和限制:

SELECT   price
FROM     value_product
WHERE    product_price_value = ?
ORDER BY width_from + height_from
LIMIT    1

否则,您可以在group-wise minimum之后,可以通过将表格加入其自身的分组版本来获取:

SELECT   v.product_price_value,
         v.price
FROM     value_product v
    JOIN (
           SELECT   product_price_value,
                    MIN(width_from + height_from) min_dimension
           FROM     value_product
           GROUP BY product_price_value
         ) t
      ON t.product_price_value = v.product_price_value
     AND t.min_dimension = v.width_from + v.height_from

在这两种情况下,我都假设只有一个记录具有最小尺寸。如果有多个这样的记录,第一个查询将不确定地选择一个;第二个查询将列出所有。如果这不是您想要的行为,则必须澄清您想要发生的事情。