我有产品表的轰鸣声示例。每个产品可以包含多个参考和价格。我想在每个名称中显示最低价格和每种价格的不同价格数量。
表格
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` text COLLATE latin1_general_ci NOT NULL,
`ref` text COLLATE latin1_general_ci NOT NULL,
`id_brand` int(11) NOT NULL,
`id_cat` int(11) NOT NULL,
`price` float NOT NULL,
`discount` float NOT NULL
数据
('1', 'Banana', 'AAN0L9HA33', '1', '1', '40', '0');
('3', 'Banana', 'AAN0L9HA31', '1', '1', '40', '0');
('4', 'Banana', 'ACL0M0BP30', '1', '1', '20', '0');
('5', 'Rice', 'ACL0M0BP40', '1', '1', '60', '0');
('6', 'Rice', 'ACL0M0BP20', '1', '1', '60', '0');
预期结果
'Banana', 1, 1, 20, 0, (total: 2)
'Rice', 1, 1, 50, 0, (total: 1)
我测试了内连接和子查询,但我很难弄清楚如何解决这个问题。
为了解决这种情况,我使用简单的产品列表进行了第一次查询,然后使用PHP,在mysql_fetch_array上,添加了另一个查询,其中“name”获取,订购价格,按“分组” '然后,使用mysql_num_rows知道有多少价格。
它可以工作但对服务器处理器来说并不是那么好。 :)
感谢您的帮助。
干杯!
答案 0 :(得分:1)
这是没有品牌和猫的查询
SELECT name,MIN(price),COUNT(DISTINCT price)
FROM mytable
GROUP BY name
演示:http://sqlfiddle.com/#!9/0ed4c/7/0
这与品牌+猫的查询相同
SELECT * FROM
(
SELECT name,MIN(price) as best_price,COUNT(DISTINCT price) as total
FROM p_produto
GROUP BY name
) tbest
LEFT JOIN
(
SELECT name,price,id_cat,id_brand
FROM p_produto
GROUP BY name,price
) tcb
ON (tcb.name = tbest.name) AND (tcb.price = tbest.best_price)