我有以下表结构:
表文件夹
id |标题 | is_hidden
表对象
id |名称 |是_隐藏 |文件夹_id
表格标签
id |名称
表label_to_folder
id |标签 ID |文件夹_id
- 每个对象始终属于一个文件夹。
- 每个文件夹可能属于一个或多个标签(由
label_to_folder
表定义)
我正在尝试获取最常用(流行)的标签,并且我通过以下查询实现了它(我认为:P):
SELECT COUNT(lf.label_id) AS cnt, lf.label_id, l.name FROM label_to_folder lf JOIN label l ON lf.label_id=l.id GROUP BY lf.label_id ORDER BY cnt DESC limit 8
我遇到的问题是上述查询的范围,因此它不计算隐藏文件夹 (folder.is_hidden=1) 或空文件夹(空文件夹是根本没有对象的文件夹,或者文件夹的所有对象都是隐藏)
感谢任何帮助。
编辑
sqlfiddle:http://sqlfiddle.com/#!9/65526/1 结果包括 id 为 5 的文件夹,但其所有文件夹都是空的 - 这就是我想要消除的。
最佳答案
您将因此获得使用过的文件夹:
select f.id
from folder f
where f.is_hidden = 0
and exists
(
select *
from object o
where o.folder_id = f.id
and o.is_hidden = 0
)
然后您可以将其添加到您的查询中:
where lf.folder_id in (<above subquery>)
关于mysql计数并连接4个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33958789/