MYSQL - 无法获得正确的结果

时间:2015-05-08 15:48:50

标签: mysql

我有产品表的轰鸣声示例。每个产品可以包含多个参考和价格。我想在每个名称中显示最低价格和每种价格的不同价格数量。

表格

`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知道有多少价格。

它可以工作但对服务器处理器来说并不是那么好。 :)

感谢您的帮助。

干杯!

1 个答案:

答案 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)

演示:http://sqlfiddle.com/#!9/0ed4c/12/0