这个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)
谢谢 - 非常感谢!
答案 0 :(得分:2)
它看起来很好,但只需对您的数据进行一些测试,并确保获得一致(正确)的结果。
答案 1 :(得分:1)
假设document.id
是主键,您可以从计数中删除DISTINCT
关键字。
有关各种连接类型的更多信息 http://en.wikipedia.org/wiki/Join_%28SQL%29