下面是我的(简化的)表格结构:
table: category_main
id name
-------------
1 food
2 vegetable
table category_sub
id id_catmain name
---------------------
10 1 cake
11 1 chocolate
12 1 burger
13 2 apple
14 2 banana
table images
id id_catsub filename views
-------------------------------------
1 10 cake1.jpg 11
2 10 cake2.jpg 24
3 10 cake3.jpg 65
4 11 chocolate1.jpg 31
5 11 chocolate2.jpg 62
6 11 chocolate3.jpg 32
7 11 chocolate4.jpg 58
8 12 burger1.jpg 23
9 12 burger2.jpg 43
10 12 burger3.jpg 76
11 13 apple1.jpg 29
11 13 apple2.jpg 67
11 14 banana1.jpg 78
期望输出:
id name total_views
----------------------------
1 food 425
2 vegetable 174
如你所见,我想得到每个主要类别的总视图。
目前我正在为每个子类别运行一个循环,但必须有一个更简单和更快的方法:/
谢谢
最佳答案
doubleLEFT JOIN
+聚合将完成这项工作。
SELECT cm.id, cm.name, sum(images.views) as views
FROM category_main as cm
LEFT JOIN category_sub as cs ON cs.id_catmain = cm.id
LEFT JOIN images ON images.id_carsub = cs.id
GROUP BY cm.id
ORDER BY views DESC;
LEFT JOIN
(而不是JOIN
)将确保列出所有类别,即使其中没有子类别或图像。如果不希望列出空类别,请使用JOIN
。