下面是我的(简化的)表格结构:

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

09-25 17:21
查看更多