需要零结果的第二个表中的相关项目计数(请查询查询)

时间:2011-02-06 05:31:49

标签: mysql

这个MySQL声明有点过头了。我把它拼凑起来通过很多谷歌搜索。它似乎工作正常但我只是想看看我是否能竖起大拇指。我是偏执狂我做了一些事情,有些问题可能会出现我不理解。

我有一个'目录'表,'文件夹'表和'文档'表。 (目录有很多文件夹,文件夹有很多文件)。

在网页上,我有一个用户可以选择目录(有多个文件夹)的选项。此查询用于AJAX调用,该调用使用属于该目录的所有文件夹的列表加载第二个选择(获取id和名称以加载'文件夹'选择)。

因此,将针对一个目录进行此查询,以获取该目录的文件夹ID和文件夹名称列表。我还需要文件夹名称来包含每个文件夹中包含的文档数量。另外,我最初只是“加入”,它没有返回零结果,而是将其更改为“左连接”列出的文件夹,包含0个文档(还没有了解不同类型的连接)。

我的FRANKEN-QUERY:

SELECT f.id, CONCAT(f.folder_name , ' (', COUNT(DISTINCT d.id), ' documents')') AS folder_name
FROM folders f 
LEFT JOIN documents d ON d.folder_id = f.id
WHERE f.directory_id = '2' 
GROUP BY f.id
ORDER BY f.folder_name

结果(似乎工作正常):

id  folder_name      
1   MAIN (2 documents)   
8   test1 (2 documents)  
9   test2 (3 documents)  
50  test3 (0 documents) 

谢谢 - 非常感谢!

2 个答案:

答案 0 :(得分:2)

它看起来很好,但只需对您的数据进行一些测试,并确保获得一致(正确)的结果。

答案 1 :(得分:1)

假设document.id是主键,您可以从计数中删除DISTINCT关键字。

有关各种连接类型的更多信息 http://en.wikipedia.org/wiki/Join_%28SQL%29