我有两个表:
产品(id,product_name,选项)
价格(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
以上代码首先按名称对产品进行分组,然后按价格对其进行排序 这是我的问题。
我不想几次展示一种产品
有什么解决办法吗?
答案 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