有奖竞答:统计文件数据

Edward 2009-01-17 06:08:49
快过新年了,给大家出点益智题活动一下吧。

现有如下数据表:

mysql> describe files;
+---------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| fullpath | varchar(600) | NO | MUL | NULL | |
| is_dir | tinyint(1) | NO | | NULL | |
| is_hidden | tinyint(1) | NO | | NULL | |
| is_readonly | tinyint(1) | NO | | NULL | |
| is_system | tinyint(1) | NO | | NULL | |
| size | bigint(20) | NO | | NULL | |
| date_created | datetime | NO | | NULL | |
| date_accessed | datetime | NO | | NULL | |
| date_modified | datetime | NO | | NULL | |
+---------------+--------------+------+-----+---------+----------------+

有如下问题:
1、有没有可能用一个SQL语句统计每个目录下的文件个数?
2、有没有可能用一句SQL语句统计每个目录所占用的控件(注意:递归所有子目录)?


我的可用分很多,答对了有更多的奖励哦。
...全文
169 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
WWWWA 2009-01-21
  • 打赏
  • 举报
回复
呵呵,就是想测试一下,用SQL语句是否能完成这个任务,楼主最好将记录及正确结果
贴出来以供测试。
whalefish2001 2009-01-21
  • 打赏
  • 举报
回复
呵呵,楼主只问有没有可能,并没有要人家写sql语句,那我就回答一下吧。
1.有没有可能用一个SQL语句统计每个目录下的文件个数?
回答:很显然,可以实现。这个sql很好实现。(乍一看,很容易实现,仔细想想,还真的是容易实现)
2、有没有可能用一句SQL语句统计每个目录所占用的控件(注意:递归所有子目录)?
回答:递归所有子目录 其实也是可以实现的,并不是很困难。
但是,你的占用的控件?什么依据?没有看到你有控件这一栏位呀。
你还是想要表达空间? 如果是空间的话,用sum(size)就可以了,也是比较容易实现的。(乍一看,几乎无法实现,仔细想想,还是比较容易实现的,并不复杂)

以上的SQL,留给后人去完成吧。

我的可用分不多,不过 wwwwA/wwwwb 的可用分貌似更多。
wwwwb 2009-01-19
  • 打赏
  • 举报
回复
贴点数据出来看看吧,以供测试
tommy9802 2009-01-19
  • 打赏
  • 举报
回复
学习学习
unixlinuxsys 2009-01-18
  • 打赏
  • 举报
回复
edyang 拥有以下勋章:
勋章 拥有数量 说明
状元 每年总版新获得的技术专家分排名第一 1 每年总版新获得的技术专家分排名第一
金牌 每月社区总版中新获得的技术专家分排名第一 2 每月社区总版中新获得的技术专家分排名第一
红花 每月大版块中新获得的专家分排名第一 7 每月大版块中新获得的专家分排名第一
黄花 每月大版块中新获得的专家分排名第二 1 每月大版块中新获得的专家分排名第二

========================================================================


向你学习
Edward 2009-01-17
  • 打赏
  • 举报
回复
ACMAIN_CHM的语句好像效率不太高啊,运行好几分钟了,还没完。

选择目录可以根据is_dir <> 0来判断的。

ACMAIN_CHM 2009-01-17
  • 打赏
  • 举报
回复
select p.sDirectory,count(*) as fileCnt, sum(size) as totalBytes
from (
select distinct LEFT(fullpath,LENGTH(fullpath)-INSTR(REVERSE(fullpath), '/')+1) as sDirectory
from files) p inner join files f on f.fullpath like concat(p.sDirectory ,'/%')
group by p.sDirectory
order by 1


/home/admin/myfile/test.php

但/home/如果没有直接的文件在表中,则不会被显示。如果也要的话,SQL语句很更复杂一些。

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧