2014-02-22 41 views
0

我喜欢MySQL,并且在过去的2年中我一直在使用它。但现在我卡住了...用MySQL查看排名

我有三个表

Files 
--------- 
id | name | views | folder_id 
1 | car | 274 | 1 
2 | bike | 100 | 1 
3 | train | 120 | 2 

Folders 
--------- 
id | name | storage_id 
1 | folder1 |  1 
2 | folder2 |  2 

Storage 
--------- 
id | name 
1 | storage1 
2 | storage2 
3 | storage3 

我想作一个MySQL查询,从而使存储的表由总量下令意见的所有文件在存储器内的每个文件夹内。

我的第一种方法是通过folder_id添加每个文件分组的总视图,但是如何将该值传递给文件夹的表以便对存储的表进行排序?

对不起,我的糟糕的解释。我仍然是一个小菜鸟。

的想法是通过意见的文件总量提前

由于订购德存储的表

回答

1

通过Storage和排序的文件视图的总数加入表格,组:

SELECT  Storage.* 
FROM  Storage 
    LEFT JOIN Folders ON Folders.storage_id = Storage.id 
    LEFT JOIN Files ON Files.folder_id = Folders.id 
GROUP BY Storage.id 
ORDER BY SUM(Files.views) DESC 

请参阅sqlfiddle

+0

谢谢! :D太棒了! – Alex

1

稍微不同的查询eggyal的,显示了总数也一样,如果你想让它

SELECT Storage.name, SUM(Files.views) AS total_views FROM Storage 
LEFT JOIN Folders ON Folders.storage_id = Storage.id 
LEFT JOIN Files ON Files.folder_id = Folders.id 
GROUP BY Storage.name 
ORDER BY total_views DESC