我有这种表结构: 菜单
id | name
1 | Electronics
2 | Cars
3 | Bikes
4 | Music
产品
id | brand_name | product_name | price | description | ...
1 | Lenovo | Notebook ABC | 800 | ... | ...
2 | Apple | iPad Mini | 400 | ... | ...
3 | Bonton | Taylor Swift | 15 | ... | ...
4 | BMW | BMW 3 2010 | 30000 | ... | ...
类别
id_product | id_menu
1 | 1
1 | 7
1 | 9
4 | 2
3 | 10
我正在尝试打印所有类别的每个品牌,并从每个类别打印出最高价格的10个产品订单,因此输出将如下所示:
Apple - Electronics - iPad Mini - 400
Apple - Electronics - iPad 2 - 300
Apple - Electronics - iPad - 180
Bonton - Music - Taylor Swift - 15
Bonton - Music - U2 - 13
...
缺乏与所有品牌的桌子使我的生活更加艰难,所以我可能会将它添加到计划中。但是,我可以请求你们帮我查询一下,这样可以获取我概述的信息吗?
非常感谢,现在对我来说太过分了。
修改
当我使用PHP时,我认为它也可以在2个查询中(我无法用一个查询来完成它,但在PHP中也遇到了2个MySQL查询)
答案 0 :(得分:0)
尝试
set @num := 0, @brand := '';
SELECT p.brand, m.name,p.name, p.price,
@num := if(@brand = p.brand, @num + 1, 1) AS row_number,
@brand := p.brand AS dummy
FROM category c
INNER JOIN products p
ON p.id = c.id_product
INNER JOIN menu m ON m.id = c.id_menu
GROUP BY p.brand, p.price, p.name
HAVING row_number < 10
ORDER BY p.price DESC;
不确定这完全符合您的预期。希望它有所帮助。