mysql计数并连接4个表

标签 mysql join count

我有以下表结构:

文件夹
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/

相关文章:

PostgreSQL:加入窗口函数/部分表

sql - 在 SQL 中加入最接近的日期

PostgreSQL 慢 COUNT() - 触发器是唯一的解决方案吗?

mysql - 比 MySQL 中的 UUID 更短的非重复字母数字代码

php - 数据库结构,怎么想

mysql - 奇怪的不区分大小写的选择行为 Django + mysql

mysql - 高效的 DB2 查询分页和显示总页数?

php - mysql 在 php 中使用空值左连接

javascript - 无法获取通过 ajax 获得的响应的计数

python - 从数组中提取正值和负值的计数