使用GROUP BY时无法正确排序

时间:2018-08-05 22:18:01

标签: php sql mysqli mariadb

我有两个表:

  1. 产品(id,product_name,选项)

  2. 价格(id,product_id,价格,商店,可用)

每个商店可以输入不同的价格。

我要选择产品,然后按价格(最低价格)从低到高排序。

但是此代码deos无法正常工作:

Select
product_name,
Prices.price 
FROM Products
LEFT JOIN Prices ON Prices.product_id=Products.id 
                AND Prices.available="yes"
GROUP BY product_name
ORDER BY Prices.price
LIMIT 0,10

以上代码首先按名称对产品进行分组,然后按价格对其进行排序 这是我的问题。

我不想几次展示一种产品

有什么解决办法吗?

3 个答案:

答案 0 :(得分:2)

Select
product_name,
MIN(Prices.price) as mprice 
FROM Products
LEFT JOIN Prices ON Prices.product_id=Products.id AND Prices.available="yes"
GROUP BY product_name
ORDER BY mprice
LIMIT 0,10

答案 1 :(得分:1)

您很近。您只需要ORDER BY中的聚合函数。但是,我还建议您对字符串常量使用表别名,INNER JOIN和单引号:

SELECT p.product_name, MIN(pr.price)
FROM Products p INNER JOIN
     Prices pr
     ON pr.product_id = p.id 
        pr.available = 'yes'
GROUP BY p.product_name
ORDER BY MIN(pr.price)
LIMIT 0, 10;

答案 2 :(得分:0)

如果您使用GROUP BY,您将无法获得同一产品的不同价格。您可以使用汇总函数检查MAX值或对它们进行计数,但不会以这种方式得到结果。另外,您应该有一个中间表,因为产品可以采用不同价格的不同型号。我不明白为什么要使用name属性。您为什么不只使用产品ID?并做类似的事情

SELECT products.product_name, prices.price
FROM products, prices
WHERE products.ID = prices.product_ID;
ORDER BY prices.price ASC